예기치 않은 동작: 반복 중 목록에서 요소 제거
목록을 반복하고 특정 기준을 충족하는 특정 요소를 제거하려고 하면, 반복 프로세스 중에 목록이 수정되면 예기치 않은 동작이 발생할 수 있습니다. 다음 Python 코드를 고려해 보세요.
numbers = list(range(1, 50)) for i in numbers: if i < 20: numbers.remove(i) print(numbers)
놀랍게도 결과는 다음과 같습니다.
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
20 미만의 숫자가 제거될 것으로 예상하지만 결과에는 그대로 남아 있습니다. 이는 반복되는 동안 목록이 수정되기 때문입니다. 첫 번째 요소 1이 제거되면 후속 요소의 위치가 이동하고 루프가 수정된 목록의 다음 요소로 계속 진행되는데, 이는 예상한 요소가 아닙니다.
이 문제를 해결하고 정확하게 목록을 반복하면 목록 이해 또는 내부 변경을 사용할 수 있습니다. 목록 내포를 사용하면 지정된 조건을 충족하는 요소만으로 새 목록을 만들 수 있습니다.
numbers = [n for n in numbers if n >= 20]
또는 슬라이스 할당을 사용하여 내부 변경을 수행할 수 있습니다.
numbers[:] = (n for n in numbers if n >= 20)
이런 방식으로 목록을 수정하면 반복에 영향을 주지 않고 원하는 결과를 얻을 수 있습니다.
위 내용은 Python에서 반복하는 동안 목록 요소를 제거하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!