我有这段代码:
def msort(l1,l2):
new=[]
x=0
for item in l1:
if l1[x]>l2[x]:
new.append(l1[x])
l1.remove(l1[x])
elif l2[x]>l1[x]:
new.append(l2[x])
l2.remove(l2[x])
else:
new.append(l1[x])
new.append(l2[x])
l1.remove(l1[x])
l2.remove(l2[x])
x+=1
print(new)
我希望它打印出来:
>>> ssort([9,5,3,2,1],[6,5,4,1])
[9,6,5,5,4,3,2,1,1]
但我把它作为我的输出:
[9, 5, 2]
为什么?我该怎么办呢?我不允许使用任何排序的函数,它必须是O(n)。我试着看看列表中的前两个项目,追加更大的一个,摆脱它,然后再次执行,直到列表为空,但它似乎没有工作。列表已经从最大数字开始排序。
感谢。
答案 0 :(得分:1)
你没有保持' x'与两个列表中的位置同步。 这表明,使用此代码,您需要两个索引,每个列表一个。
理解你的代码无法正常工作的一个好方法是抓住一个套牌
卡片,创建两个分类的迷你甲板,比如说10张牌,然后走路
通过你的算法。新旧套牌涵盖l1
,l2
和new
,
所以你需要铅笔和纸来跟踪其他变量的值,
在这种情况下x
。您很快就会发现问题。