반복 중 목록 수정의 위험성 이해
목록을 변경하는 동안 목록을 탐색하면 사이의 불일치로 인해 예기치 않은 동작이 발생할 수 있습니다. 목록의 상태와 반복자의 목록 상태에 대한 이해입니다. 이를 설명하기 위해 다음 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!