Python 按升序合并3个列表

Python 按升序合并3个列表,python,Python,我正在寻找一种方法来合并3个按升序排序的列表,而不使用任何内置函数或递归。 例如: merge([1,4],[1,5,6],[3,7,9]) produces [1,1,3,4,5,6,7,9] 到目前为止,我已经完成了以下工作,但没有产生上述预期结果 def merge(list1, list2, list3): results = [] while len(list1) and len(list2) and len(list3): if (list1[0]

我正在寻找一种方法来合并3个按升序排序的列表,而不使用任何内置函数或递归。 例如:

merge([1,4],[1,5,6],[3,7,9]) produces [1,1,3,4,5,6,7,9]
到目前为止,我已经完成了以下工作,但没有产生上述预期结果

def merge(list1, list2, list3):
    results = []
    while len(list1) and len(list2) and len(list3):
        if (list1[0] < list2[0]) and (list1[0] < list3[0]):
            results.append(list1.pop(0))
        elif (list2[0] < list1[0]) and (list2[0] < list3[0]):
            results.append(list2.pop(0))
        elif (list3[0] < list1[0]) and (list3[0] < list2[0]):
            results.append(list3.pop(0))
    results.extend(list1)
    results.extend(list2)
    results.extend(list3)
    return results
def合并(列表1、列表2、列表3):
结果=[]
而len(列表1)、len(列表2)和len(列表3):
如果(列表1[0]<列表2[0])和(列表1[0]<列表3[0]):
results.append(list1.pop(0))
elif(列表2[0]<列表1[0])和(列表2[0]<列表3[0]):
results.append(list2.pop(0))
elif(列表3[0]<列表1[0])和(列表3[0]<列表2[0]):
results.append(list3.pop(0))
results.extend(列表1)
results.extend(列表2)
结果.扩展(列表3)
返回结果

或使用非内置排序方式:

def merge(*l):
    l=[x for i in l for x in i]
    newl = []
    while l:
        mi = l[0]
        for x in l: 
            if x < mi:
                mi = x
        newl.append(mi)
        l.remove(mi)    

    return newl
是:


您使用的
没有任何内置功能,因此:

list1 = [1,4] 
list2 = [1,5,6]
list3 = [3,7,9]

print(merge(list1, list2, list3))
[1, 1, 3, 4, 5, 6, 7, 9]
一个非常简单的形式:

def merge(*lists_in):
    list_in = []
    for l in lists_in:
        list_in += l

    i = 0
    while True:
    if i == list_in.__len__() -1:
        break
    if list_in[i] > list_in[i+1]:
        temp = list_in[i]
        list_in[i] = list_in[i+1]
        list_in[i+1] = temp
        i = 0
    else:
        i += 1

return list_in
测试它:

list1 = [1,4] 
list2 = [1,5,6]
list3 = [3,7,9]

print(merge(list1, list2, list3))
[1, 1, 3, 4, 5, 6, 7, 9]
Out:

list1 = [1,4] 
list2 = [1,5,6]
list3 = [3,7,9]

print(merge(list1, list2, list3))
[1, 1, 3, 4, 5, 6, 7, 9]

有没有一种方法可以在没有任何辅助功能的情况下实现这一点?@CutiePie,是的,有。我称之为“丑陋且结构不太好”的方法:-)在任何情况下,不要将其视为辅助函数,它本身实际上是一个有用的双向合并。重构意味着你可以在其他情况下使用它。请看我的简单解决方案Cutie Pie在上次更新中删除了唯一的内置
len()
函数,看看。当合并的全部目的是合并已排序的数据时,真的不需要进行排序:-)@paxdiablo哈哈, yeah@paxdiablo现在使用merge()名称进行此更新是合法的,但有人否决了…:)
list1 = [1,4] 
list2 = [1,5,6]
list3 = [3,7,9]

print(merge(list1, list2, list3))
[1, 1, 3, 4, 5, 6, 7, 9]