2016-05-17 3 views
0

リストからアイテムを削除したいとき、その注文はシャッフルされたように見えます。Python remove()ソートリスト?

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 

これは、次のような結果(ファーストプリント)を与える

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) 

:私は現在、次のコードを持っています削除は並べ替えを暗示しますか?もしそうなら、注文をどのように維持するのですか?

+1

ことで、これら二つのループが等価であることを見て理解することができますその上。 – miradulo

答えて

4

.remove()あなたのリストは確かにソートされていません。むしろ、リスト内の要素を削除することでリスト全体の反復処理を破壊しているだけです。基本的に、caseを繰り返し中にtodoから削除すると、残りのcaseはすべてtodoにリストされて1か所下に移動します。それであなたの反復はインデックスを逃してしまい、あなたは望ましくない結果を得るでしょう。学習するレッスンはではありません。は、反復処理中にリストから要素を削除しません。代わりに、リストの理解、またはgoing backwardsを指定できます。

この望ましくない動作をより簡単にあなたが反復している間todo` `から物事を削除しないでください第二は、単に低レベル表現

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