list_1 = ['하나', '둘','셋','넷','다섯']
for e in list_1:
print(e)
list_1.remove(e)
output :
![[파이썬 기초] for loop과 remove를 이용 할때 이상하다면..? [파이썬 기초] for loop과 remove를 이용 할때 이상하다면..?](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
위 코드와 같이 출력되어야할 문자들이 출력되다 마는 문제를 겪고 계신다면 이 포스팅을 참조하시기 바랍니다.
우리가 원하는 형태는 아마도..
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 loop과 remove를 이용 할때 이상하다면..? [파이썬 기초] for loop과 remove를 이용 할때 이상하다면..?](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
보시는것 처럼 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 |
댓글
꼬예님의
글이 좋았다면 응원을 보내주세요!
이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.
응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.
글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.
응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.