Python remove()排序列表?

时间:2016-05-17 11:56:17

标签: python list sorting

看来,当我想从列表中删除某个项目时,该订单会被洗牌。我目前有以下代码:

todo = []
for case in cases:
    todo.append(case)

for case in todo:
    print(case[1]) #first print

while(len(todo) > 0):
    for case in todo:
        subject = case[1]
        print("Case: " + str(subject)) #second print
        todo.remove(case)

这给出了以下结果(第一次打印):

55566 
66977
66977
136566
136566
37493
37493
37493
63126
37289

然后是第二次打印(以不同的顺序):

Case: 55566
Case: 66977 
Case: 136566
Case: 37493
Case: 63126
Case: 66977
Case: 37493
Case: 37289
Case: 136566
Case: 37493

删除是否意味着排序?如果是这样,如何维持秩序?

1 个答案:

答案 0 :(得分:4)

.remove()肯定不会对您的列表进行排序。相反,您只是通过删除其中的元素来破坏列表上的迭代。基本上,当您在迭代期间从case移除todo时,case中的所有剩余todo都会在列表中向下滑动一个位置。然后你的迭代错过了一个索引,你会得到不希望的结果。要学习的教训是不要在迭代时从列表中删除元素。另一种选择可以是列表理解,或going backwards

通过看到这两个循环是等价的,第二个只是一个较低级别的表示,可以更容易地理解这种不受欢迎的行为

cases = [1,2,3]
for case in cases:
    print(case)
    cases.remove(case)

i = 0
while i < len(cases):
    x = cases[i]
    print(x)
    cases.remove(x)
    i+=1