在Python列表的开头写下低值

时间:2014-10-14 03:35:20

标签: python list loops

我有一个Python程序,应该遍历列表列表。如果任何子列表的第一个值低于新列表中第一个子列表的第一个值,则程序应该在该子列表前面添加。如果没有,程序应附加子列表。

myList = [[4, [49, 43, 41]], [3, [51, 52]], [2, [62, 69, 67]], [10, [71, 75]], [0, [4, 8, 7]], [9, [89, 88, 80]]]

newList = []
for item in myList:
    if len(newList) == 0:
        newList.append(myList[0])
    elif item[0] < newList[0]:
        newList.insert(0, item)
    else:
        newList.append(item)
print newList

此代码的输出为[[9,[89,88,80]],[0,[4,8,7],[10,[71,75]],[2,[62, 69,67]],[3,[51,52]],[4,[49,43,41]],而它应该是[[0,[4,8,7]],[2,[62 ,69,67]],[3,[51,52]],[4,[49,43,41]],[10,[71,75]],[9,[89,88,80]]或类似的东西。

我无法弄清楚错误所在。有谁知道如何修复这个程序? (当然,我意识到list.sort()会产生类似的效果,但是这个代码旨在用于较大列表太大而无法存储在内存中的上下文中,并且在任何情况下都不需要真正的排序。 )

1 个答案:

答案 0 :(得分:1)

除了这是我见过的最奇怪的“排序”算法之外......(你只对newList的第一个元素中出现的任何列表进行排序您最终会找到位于最后的[9, [...]]。对我来说,它会在[10, [...]]之前进入,这是有意义的,但这不是您要求的,所以我我忽略了它!)

问题在于您没有与newList的第一个元素的第一个元素进行比较。

标有elif item[0] < newList[0]:的行应为elif item[0] < newList[0][0]: