有没有一种方法可以合并2个排序的列表,其中list1升序,而list2降序,但是新合并的列表应该按升序排序。我希望不使用任何内置函数或递归来执行此操作。
我有以下内容,但只有在list2也是升序的情况下它才有效。
def merge2(list1, list2):
results = []
while len(list1) and len(list2):
if list1[0] < list2[0]:
results.append(list1.pop(0))
else:
results.append(list2.pop(0))
results.extend(list1)
results.extend(list2)
return results
该函数应产生以下内容:
merge2([1,3,11,34],[60,38,7,1,0]) => [0,1,1,3,7,11,34,38,60]
答案 0 :(得分:0)
您可以比较list1
的第一个元素和list2
的最后一个元素,并且可以将pop
的结尾的list2
与pop()
(不任何参数)。最后,您可以将append
到list2
中的result
中的其余列表与pop()
一起使用,直到没有剩余为止。
因此,进行一些修改,您的代码将变为:
def merge2(list1, list2):
results = []
while list1 and list2:
if list1[0] < list2[-1]:
results.append(list1.pop(0))
else:
results.append(list2.pop())
results.extend(list1)
while list2:
results.append(list2.pop())
return results
print(merge2([1,3,11,34], [60,38,7,1,0]))
# [0, 1, 1, 3, 7, 11, 34, 38, 60]
答案 1 :(得分:0)
您可以使用for
循环执行基本相同的操作。
这意味着仅list2
被突变。
def merge2(list1, list2):
result = []
for item in list1:
while list2[-1] < item:
result.append(list2.pop())
result.append(item)
while list2:
result.append(list2.pop())
return result
请注意,它不使用len
(这是一个内置函数)