강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

lou84님의 프로필 이미지
lou84

작성한 질문수

[왕초보] [누적 5,000명+] Python 프로그래밍 기초 완성 로드맵

순회 중 리스트 수정은 왜 위험한지 궁금합니다.

해결된 질문

작성

·

18

1

안녕하세요.

열심히 배우고 있는 수강생입니다.

 

순회 중 리스트 수정은 왜 위험한지 궁금합니다.

 

좋은 강의 감사합니다.

답변 2

2

Selena님의 프로필 이미지
Selena
지식공유자

안녕하세요. 셀레나입니다.

 

좋은 질문이에요. :)

for로 리스트를 도는 동안 요소를 지우거나 넣으면 인덱스가 밀려 다음 값을 건너뛰거나 중복·에러가 나므로, 원본은 건드리지 말고 새 리스트로 결과를 만들거나 사본을 돌리거나 뒤에서 앞으로 지우는 방식이 안전합니다.

 

아래의 예제는 2를 지우면 3이 2의 자리로 당겨지는데, 이미 다음으로 넘어가서 그 3을 못 봅니다. 그래서 기대와 달리 몇 개가 안 지워진 채 남을 수 있어요.

a = [1, 2, 3, 4, 5, 6]
for x in a:
    if x % 2 == 0:   # 짝수 지우기
        a.remove(x)
print(a)

 

그래서 최대한 돌 때는 건드리지 말고, 결과를 새로 담아 만드는 걸 추천드립니다.

아래 예제는 a를 돌면서 짝수만 result에 담고, 마지막에 a를 그걸로 바꿉니다.

result = []
for x in a:
    if x % 2 == 0:   # 짝수면
        result.append(x)
a = result

0

안녕하세요, 인프런 AI 인턴입니다. lou84님.

리스트를 순회하는 동안 리스트를 수정하는 것은 프로그래밍에서 자주 발생하는 실수 중 하나입니다. 이는 여러 가지 이유로 문제가 발생할 수 있습니다.

  1. 인덱스 오류: 리스트의 크기를 변경하면 순회 중인 인덱스가 잘못된 위치를 가리키게 되어 IndexError가 발생할 수 있습니다. 예를 들어, 리스트의 길이가 줄어드는 경우, 순회를 하는 동안 인덱스가 리스트의 범위를 벗어날 수 있습니다.

  2. 예상치 못한 행동: 리스트를 순회하면서 원소를 추가하거나 제거하면, 순회 중인 리스트의 상태가 바뀌어 의도했던 순회와 다른 결과를 가져올 수 있습니다. 예를 들어, 제거되는 원소 때문에 일부 원소가 건너뛰어져 순회될 수 있습니다.

  3. 불안정한 코드: 이렇게 리스트의 크기와 내용을 동적으로 수정하면 코드를 예측 가능하게 유지하기 어려워지고, 버그가 발생할 확률이 높아집니다. 코드의 가독성과 유지보수성도 떨어지게 됩니다.

이를 피하기 위해, 리스트를 복사하여 순회하거나, 삭제하는 경우에는 뒤에서부터 순회하는 방식 등을 사용하여 문제를 회피할 수 있습니다.

순회 중 리스트를 수정하는 것이 위험한 이유에 대한 더 자세한 설명이 필요하시다면, 관련 강의 자료를 참고하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

lou84님의 프로필 이미지
lou84

작성한 질문수

질문하기