print
わかりやすくするためにいくつかのステートメントを追加します。
x = range(10)
for index, number in enumerate(x):
print "x is ", x
print "element is", number
print "index is ", index
print
if number % 2 == 0:
x.remove(number)
そして出力:
x is [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
element is 0
index is 0
x is [1, 2, 3, 4, 5, 6, 7, 8, 9]
element is 2
index is 1
x is [1, 3, 4, 5, 6, 7, 8, 9]
element is 4
index is 2
x is [1, 3, 5, 6, 7, 8, 9]
element is 6
index is 3
x is [1, 3, 5, 7, 8, 9]
element is 8
index is 4
ご覧のとおり、リストから要素を削除しても、 は だけindex
上昇し続けます。1
これが、ループが要素をスキップする原因です。
他の人が指摘しているように、リストをループして要素を削除することはお勧めできません。代わりにコピーをループします。
for number in x[:]:
または:
for number in list(x):
さらに良いことに、リスト内包表記を使用して新しいリストを作成します。
[number for number in x if number % 2 == 0]