본문 바로가기
python/uncategorized

for문 도중 값이 바뀌는 것에 주의

by Falto 2021. 5. 19.
>>> a = list('asdf1234')
>>> a
['a', 's', 'd', 'f', '1', '2', '3', '4']
>>> for x in a: a.remove(x)
...
>>>
>>> a
['s', 'f', '2', '4']

for문 도중에 a의 배열이 변하게 하면, 의도치 않은 결과를 갖게 될 수 있다.

asdf1234에서 a를 지우면

sdf1234가 남는데, for문은 a[0]을 처리했으니 a[1]을 처리하려고 할 것이다.

그런데 이 시점에서 a[1]은 s가 아닌 d이다. 즉 a[1]을 처리하고나면 sf1234가 남는다.

sf1234에서 a[2]는 1이므로 처리하면 sf234...

이런 식으로 가서 마지막엔 sf24만 남게 된다.

그렇다면 for문 도중에 배열이 변하지 않게 하려면 어떻게 해야 할까?

>>> a = list('asdf1234')
>>> for x in a.copy(): a.remove(x)
...
>>> a
[]

간단하다. 배열의 복사본을 만들면 된다. 사실 이건 얕은 복사이긴 한데... 알아서 하셍

'python > uncategorized' 카테고리의 다른 글

__add__와 __radd__  (0) 2021.08.10
시간 복잡도와 이중 for문  (0) 2021.06.04
while문에서 time.sleep의 중요성  (0) 2021.05.17
python mmap ipc  (0) 2021.04.20
python 표준 출력 표준 오류 파일로 저장  (0) 2021.04.18

댓글