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

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

Barbara Streisand
Barbara Streisand원래의
2024-12-27 18:36:11940검색

Why Does Modifying a Python List During Iteration Lead to Unexpected Results?

Python의 반복 목록 변경: 결과 이해

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

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