반복 중 목록 수정 중 예기치 않은 결과
목록을 반복하면서 수정하면 예기치 않은 결과가 발생할 수 있습니다. 다음 코드를 고려하십시오.
numbers = list(range(1, 50)) for i in numbers: if i < 20: numbers.remove(i) print(numbers)
목록에서 20보다 작은 숫자를 제거하려는 의도에도 불구하고 결과 출력에는 이러한 숫자 중 일부가 포함됩니다. 이러한 불일치는 반복 중에 목록이 변경되기 때문에 발생합니다.
구체적으로 20(1) 미만의 첫 번째 숫자를 제거한 후 루프는 원본 목록의 다음 항목으로 진행됩니다. 이제 2가 아닌 3이 됩니다. . 이 프로세스는 계속 진행되어 20 미만의 모든 홀수가 제거됩니다.
이 문제를 방지하려면 목록과 같은 대체 접근 방식을 사용하는 것이 좋습니다. 이해 또는 생성기 표현. 다음은 목록 이해를 사용하는 예입니다.
numbers = [n for n in numbers if n >= 20]
이 코드는 원하지 않는 요소를 필터링하면서 목록의 원래 순서를 유지합니다. 또는 생성기 표현식을 사용하여 내부 변경을 사용할 수 있습니다.
numbers[:] = (n for n in numbers if n >= 20)
요소를 제거하기 전에 요소에 대한 작업을 수행해야 하는 경우 인덱스 루프를 사용하고 요소를 없음으로 설정하는 것이 좋습니다. 그런 다음 None이 아닌 요소만 포함하는 새 목록을 만듭니다.
for i, n in enumerate(numbers): if n < 20: print("do something") numbers[i] = None numbers = [n for n in numbers if n is not None]
위 내용은 반복 중에 목록을 수정하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!