Python에서 반복 중 목록 제거 이해
목록을 반복하는 동안 요소를 제거해야 할 수도 있습니다. 그러나 그렇게 하면 제거가 올바르게 처리되지 않으면 예기치 않은 동작이 발생할 수 있습니다.
Python 코드를 고려하세요.
a = list(range(10)) remove = False for b in a: if remove: a.remove(b) remove = not remove print(a)
이 코드는 출력 [0, 2, 3, 5를 생성합니다. , 6, 8, 9]가 예상되는 [0, 2, 4, 6, 8] 대신에 발생합니다. 이 예외는 Python이 반복하는 동안 변경 가능한 객체를 처리하는 방식으로 인해 발생합니다.
문제에 대한 시각적 설명
작업 순서는 다음과 같이 시각화할 수 있습니다.
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] | b = 0; remove? no ^ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] | b = 1; remove? yes ^ [0, 2, 3, 4, 5, 6, 7, 8, 9] | b = 3; remove? no ^ [0, 2, 3, 4, 5, 6, 7, 8, 9] | b = 4; remove? yes ^ [0, 2, 3, 5, 6, 7, 8, 9] | b = 6; remove? no ^ [0, 2, 3, 5, 6, 7, 8, 9] | b = 7; remove? yes ^ [0, 2, 3, 5, 6, 8, 9] | b = 9; remove? no ^
오류 없음 표시
Python은 기본 반복자가 수정될 때 오류를 발생시키지 않습니다. 왜냐하면 돌연변이가 반복자에 언제, 어떻게 영향을 미칠지 결정하려면 광범위한 런타임 분석이 필요하여 실행 속도가 크게 느려지기 때문입니다.
동작 일관성
이 예에 설명된 동작은 여러 버전에서 일관되게 유지되었습니다. Python은 반복 중에 변경 가능한 객체를 수정하는 코드의 예측 가능한 실행을 보장합니다.
위 내용은 반복 중에 Python 목록에서 요소를 제거하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!