2016-05-17 259 views
0

看來,當我想從列表中刪除一個項目時,訂單會被洗牌。目前,我有以下代碼:Python刪除()排序列表?

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

不要'todo'刪除的東西超過它。 – miradulo

回答

4

.remove()肯定是不排序你的清單。相反,你只是通過刪除其中的元素來破壞你對列表的迭代。從本質上講,當您在迭代過程中從todo中刪除case時,todo中的所有剩餘case都會在您的列表中向下滑動一個位置。然後你的迭代遺漏了一個索引,並且你得到了不希望的結果。要學習的教訓是不要在迭代它時從列表中刪除元素。另一種選擇可能是列表理解,或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 
而你迭代
+0

好的,謝謝你的解釋。通過索引以及刪除後如何更新列表有意義:) – Bas