メモやらログやら

考えたこととかメモする

ループのイテレータに指定した奴をループ内でremoveしたら死んだのでメモ

aaa = list(range(10))

for i in aaa:

 print(i)

 if i == 4:

   aaa.remove(i)

====出力====

0

1

2

3

4

6

7

8

9

====出力====

で5が出ない。

aaa = list(range(10))

for i in aaa.copy():

 print(i)

 if i == 4:

   aaa.remove(i)

====出力====

0

1

2

3

4

5

6

7

8

9

====出力====

で5も出る

copy()なしのほうは、removeした段階で4がいた場所にできた空白を埋めるために5以後のリストの中身が左に一つずれたため、元は4のいた場所に5が入り、ループによりポインタが一つ先にずれると次は6、みたいなことが起こっているのだと思う。当たり前といえば当たり前だけどしょうもないのにひっかかったので戒めとしてメモ。