Python 按升序合并3个列表
我正在寻找一种方法来合并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]
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]