>백엔드 개발 >파이썬 튜토리얼 >반복 중에 목록을 수정하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?

반복 중에 목록을 수정하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-23 19:53:17746검색

Why Does Modifying a List During Iteration Produce Unexpected Results?

반복 중 목록 수정 중 예기치 않은 결과

목록을 반복하면서 수정하면 예기치 않은 결과가 발생할 수 있습니다. 다음 코드를 고려하십시오.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.