Python에서 항목을 반복적으로 제거할 때 이상한 동작
Python에서는 반복 중에 목록에서 항목을 삭제할 때 이상한 결과가 발생할 수 있습니다. 다음 코드를 고려하세요.
numbers = list(range(1, 50)) for i in numbers: if i < 20: numbers.remove(i) print(numbers)
예상 출력: [20, 21, ..., 49]
실제 출력: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, ..., 49]
이유:
목록을 반복하면서 수정하는 데서 문제가 발생합니다. 첫 번째 루프 반복 중에 1이 제거됩니다. 그러나 후속 반복은 더 이상 단축된 목록에서 2를 가리키지 않고 대신 3을 가리킵니다. 이는 20보다 큰 요소만 남을 때까지 계속됩니다.
해결책:
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: print("do something") numbers[i] = None numbers = [n for n in numbers if n is not None]
반복 중에 목록 길이를 수정하는 것은 일반적으로 권장되지 않는다는 점에 유의하는 것이 중요합니다. 제공된 솔루션은 원하는 결과를 달성하기 위한 대체 접근 방식을 제공합니다.
위 내용은 Python 목록에서 항목을 반복적으로 제거하면 예기치 않은 결과가 생성되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!