순회 중 리스트 수정은 왜 위험한지 궁금합니다.
안녕하세요.
열심히 배우고 있는 수강생입니다.
순회 중 리스트 수정은 왜 위험한지 궁금합니다.
좋은 강의 감사합니다.
Answer 2
2
안녕하세요. 셀레나입니다.
좋은 질문이에요. :)
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님.
리스트를 순회하는 동안 리스트를 수정하는 것은 프로그래밍에서 자주 발생하는 실수 중 하나입니다. 이는 여러 가지 이유로 문제가 발생할 수 있습니다.
인덱스 오류: 리스트의 크기를 변경하면 순회 중인 인덱스가 잘못된 위치를 가리키게 되어
IndexError가 발생할 수 있습니다. 예를 들어, 리스트의 길이가 줄어드는 경우, 순회를 하는 동안 인덱스가 리스트의 범위를 벗어날 수 있습니다.예상치 못한 행동: 리스트를 순회하면서 원소를 추가하거나 제거하면, 순회 중인 리스트의 상태가 바뀌어 의도했던 순회와 다른 결과를 가져올 수 있습니다. 예를 들어, 제거되는 원소 때문에 일부 원소가 건너뛰어져 순회될 수 있습니다.
불안정한 코드: 이렇게 리스트의 크기와 내용을 동적으로 수정하면 코드를 예측 가능하게 유지하기 어려워지고, 버그가 발생할 확률이 높아집니다. 코드의 가독성과 유지보수성도 떨어지게 됩니다.
이를 피하기 위해, 리스트를 복사하여 순회하거나, 삭제하는 경우에는 뒤에서부터 순회하는 방식 등을 사용하여 문제를 회피할 수 있습니다.
순회 중 리스트를 수정하는 것이 위험한 이유에 대한 더 자세한 설명이 필요하시다면, 관련 강의 자료를 참고하실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
max x5 플랜을 결제했습니다.
0
2
1
클로드 초기 설정
0
2
1
사용자 스코프 설정 파일 적용 문제
0
6
1
6-6
0
8
1
OAuth방식 강의 문의
0
11
0
클로드코드 유료플랜 할인 방법이 있을까요?
0
18
0
HTML2Design 플러그인 시, 클로드에서 코딩해서 만든 UI 예시 이미지 가져오기 오류
0
6
0
작업형 1 유형 부분
0
11
1
API Error : 400 에러의 원인과 해결방법이 궁금합니다!!
0
16
2
파이썬 문법과 기본 개념을 학습한 이후에는 어떤 방향으로 심화 학습을 하는 것이 좋을지 궁금합니다.
1
56
1
리스트를 복사할 때 a = b 와 a = b[:] 의 차이는 무엇인가요?
1
70
1
파이썬에서 객체의 참조(reference)와 할당(assignment)의 차이
2
78
1
파이썬에서 함수의 매개변수 기본값을 설정할 때 주의해야 할 점은 무엇인가요?
1
60
2
얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)의 차이
2
170
2
변수 선언에 관련한 질문.
1
79
2
for-else는 언제 쓰나요?
1
68
2
요즘 바이브코딩이 대세인데 파이썬을 배워야하는 이유가 뭘까요?
1
204
1
코드에서 오류를 찾는 팁이 있을까요?
2
68
2
range함수 관련
2
107
1
포맷팅 질문
2
55
1
if 질문
2
76
1
set 질문
2
65
2
딕셔너리 반복자 질문
2
58
1
클래스 질문
2
65
1

