2016-12-29 12 views
0

私が最後に'0'を持つ要素を除去することを目的のみ'0'と、そして私のコードは次のとおりです。なぜforループは、forループ内のリストが変更された後、最初の要素をスキップしますか?

s = ['a0', 'b0', '0', 'c', 'd'] 
for x in s: 
    if x[-1] == '0' or x == '0': 
     s.remove(x) 

s #result 
['b0', 'c', 'd'] 

私はデバッグするとき、私はその後、「A0」が除去された後、s['b0', '0', 'c', 'd']なりことがわかりました私が思ったように、xは'b0'になりますが、それは'0'になるので、'b0'をスキップします。その理由とそれを修正する方法が不思議です。

答えて

4

リストの反復処理中にリストを変更しないでください(more information here)。

代わりに、一度にすべてのリストをフィルタリングしてみてください。

s = [x for x in s if x[-1] != '0'] 
関連する問題