Python에서 목록을 반복하는 동안 목록을 수정하면 예기치 않은 결과가 발생할 수 있습니다. 다음 코드를 고려해 보세요.
numbers = list(range(1, 50)) for i in numbers: if i < 20: numbers.remove(i) print(numbers)
의도한 대로 20 미만의 숫자를 제거하는 대신 이 코드는 20 자체와 함께 20 미만의 모든 숫자가 누락된 목록을 인쇄합니다.
이 문제는 목록에서 항목을 제거하면 후속 항목의 위치가 이동한다는 사실에서 비롯됩니다. 루프가 진행됨에 따라 제거된 요소가 목록에 "구멍"을 생성하므로 검사 중인 항목은 더 이상 예상 항목이 아닙니다.
예를 들어 초기 반복 중에는 1이 제거되지만 다음 반복에서는 2를 확인하지 않습니다. 대신 목록이 단축되었으므로 3을 확인합니다. 이 동작이 계속되어 잘못된 출력이 발생합니다.
이 문제를 방지하려면 다음과 같이 반복 중에 목록을 변경하는 대체 방법을 사용하십시오.
numbers = [n for n in numbers if n >= 20]
numbers[:] = (n for n in numbers if n >= 20)
for i, n in enumerate(numbers): if n < 20: numbers[i] = None numbers = [n for n in numbers if n is not None]
이 기술은 반복하는 동안 목록의 길이를 수정하지 않습니다. , 올바른 항목 처리 및 원하는 출력을 보장합니다.
위 내용은 반복 중에 Python 목록을 수정하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!