list_1 = ['하나', '둘','셋','넷','다섯']
for e in list_1:
print(e)
list_1.remove(e)
output :
위 코드와 같이 출력되어야할 문자들이 출력되다 마는 문제를 겪고 계신다면 이 포스팅을 참조하시기 바랍니다.
우리가 원하는 형태는 아마도..
1. ['하나', '둘', '셋', '넷', '다섯'] -> '하나' 출력 , '하나' 제거'
2. ['둘', '셋', '넷', '다섯' ] -> '둘' 출력, '둘' 제거
3. ['셋', '넷', '다섯' ] -> '셋' 출력, '셋' 제거
4. ['넷', '다섯'] -> '넷' 출력, '넷' 제거
5. ['다섯'] -> '다섯' 출력, '다섯' 제거
이런식으로 다섯번 출력 되어야 할것같은데요.
왜 이런 문제가 발생할까요?
for 문을 돌면서 remove 가 실행 될때마다 리스트 안에 있는 값들은 하나씩 줄어드는게 맞습니다 .
하지만 인덱스는 리스트가 새로 갱신될때마다 새로 시작되지 않습니다.
무슨말이냐?
['하나', '둘', '셋', '넷', '다섯'] 에서 '하나'를 출력한뒤 for문은 그 다음 인덱스 번호를 기준으로 출력을 합니다.
즉 '하나'가 삭제되고 남은 ['둘, '셋', '넷', '다섯']에서 '둘'을 출력하는게 아니라 다음 인덱스인 1에 위치하는 '셋'을 출력하게 되는것이죠.
다음도 마찬가지 입니다. '둘'을 삭제하고 남은
['셋','넷', '다섯']에서 그 다음 출력 인덱스 2에 위치하는 '다섯'을 출력하는것입니다.
이제 왜 위와 같이 출력이 되는지 이해가 되시죠?
만약 우리가 원하는 식으로 코드를 실행하고 싶다면 슬라이싱을 이용한 얕은 복사를 이용하면 됩니다.
list_1 = ['하나', '둘','셋','넷','다섯']
for e in list_1[:]:
print(e)
list_1.remove(e)
output :
보시는것 처럼 for 문에 사용되는 리스트는 [:]를 이용해 리스트를 복사해서 사용하니 정상적으로 출력이 됩니다.
( 얕은 복사, 깊은 복사에 대해서 개념이 모호하신분은 해당 포스트를 참조해주세요 :) )
'파이썬 > 파이썬 기초' 카테고리의 다른 글
[파이썬 기초] 파이썬 설치 및 실행(파이썬 시작 하기) (0) | 2022.03.28 |
---|---|
[python 기초] github에 민감한 정보를 가리고 올리고 싶다면? 환경변수 설정 (with dotenv) (0) | 2022.03.18 |
[python 기초] selenium add_arguement()를 이용한 headless 및 여러가지 기능 배우기 (1) | 2020.05.27 |
[python 기초] 셀레니움(firefox,IE,chrome 이용) 설치 및 사용법 (0) | 2020.05.15 |
[파이썬 기초] 셀레니움(selenium) NoSuchElementException , ElementNotVisibleException 에러 해결 방법 (0) | 2020.05.13 |
댓글