>백엔드 개발 >파이썬 튜토리얼 >반복 중에 목록을 수정하면 Python에서 예기치 않은 결과가 발생하는 이유는 무엇입니까?

반복 중에 목록을 수정하면 Python에서 예기치 않은 결과가 발생하는 이유는 무엇입니까?

DDD
DDD원래의
2024-12-24 16:14:18837검색

Why Does Modifying a List During Iteration Cause Unexpected Results in Python?

반복 중 목록 수정의 위험성 이해

목록을 변경하는 동안 목록을 탐색하면 사이의 불일치로 인해 예기치 않은 동작이 발생할 수 있습니다. 목록의 상태와 반복자의 목록 상태에 대한 이해입니다. 이를 설명하기 위해 다음 Python 코드를 고려하십시오.

l = range(100)
for i in l:
    print(i)
    print(l.pop(0))
    print(l.pop(0))

예상된 일련 번호 출력 대신 이 코드는 독특한 결과를 생성합니다. 그 이유는 반복자가 목록 l을 반복하는 동안 목록 자체가 수정되기 때문입니다. 특히 pop(0) 메서드는 l의 시작 부분에서 요소를 제거합니다.

이러한 불일치를 방지하려면 반복되는 컨테이너를 수정하지 않는 것이 중요합니다. 일반적인 해결 방법 중 하나는 컨테이너의 복사본을 만들고 복사본을 반복하는 것입니다. 그러나 원래 컨테이너를 수정하는 것이 목표인 이와 같은 경우에는 다른 접근 방식이 필요합니다.

다음 대체 코드를 고려하세요.

i = 0
while i < len(some_list):
    print(some_list[i])
    print(some_list.pop(0))
    print(some_list.pop(0))
    i += 1

이 코드에서는 다음을 사용합니다. 반복을 수동으로 제어하는 ​​while 루프. 목록을 직접 반복하는 대신 인덱스 i를 사용하여 요소에 액세스한 다음 some_list에서 항목을 수동으로 팝합니다. 이렇게 하면 루프가 some_list 업데이트에 응답하게 됩니다.

위 내용은 반복 중에 목록을 수정하면 Python에서 예기치 않은 결과가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.