>>> 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 |
댓글