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

Python에서 반복하는 동안 목록을 수정하면 예기치 않은 동작이 발생하는 이유는 무엇입니까?

DDD
DDD원래의
2024-12-12 22:17:13149검색

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

반복 중 목록 수정의 영향

Python에서 목록 작업을 할 때는 반복 중 목록 수정에 주의하는 것이 중요합니다. 원래 목록을 순회하면서 조작하려고 하면 예측할 수 없는 결과가 발생할 수 있습니다.

다음 코드 샘플을 고려하세요.

l = range(100)
for i in l:
    print(i)
    print(l.pop(0))
    print(l.pop(0))

이 코드는 목록의 모든 요소를 ​​인쇄한 다음 처음 두 요소를 제거하고 나머지 요소에 대해 이 과정을 반복합니다. 그러나 실제 출력은 이러한 기대와는 다릅니다.

이러한 예외의 원인은 반복 중에 목록이 수정되었기 때문입니다. l.pop(0)을 사용하여 목록에서 요소를 제거하면 크기와 순서가 변경됩니다. 결과적으로 반복자 i가 오래되어 루프가 비정상적으로 작동하게 됩니다.

반복 중 목록 수정 방지

이러한 문제를 방지하려면 목록의 복사본을 복사하고 복사본을 반복합니다. 이렇게 하면 원래 목록이 수정되지 않은 상태로 유지되고 반복자는 루프 전체에서 요소에 대한 정확한 액세스를 제공합니다.

예를 들어 다음 코드는 이 접근 방식을 보여줍니다.

l_copy = list(l)  # Create a copy of l
for i in l_copy:
    print(i)
    print(l.pop(0))
    print(l.pop(0))

이제 출력은 원래 목록 l은 무결성을 유지하고 수정된 복사본 l_copy는 다음 용도로 사용되므로 예상되는 동작과 일치합니다.

또는 제공된 답변에서 제안한 대로 인덱스가 있는 while 루프를 사용하여 반복을 제어하고 루프 내의 원래 목록에 필요한 수정을 가할 수 있습니다.

위 내용은 Python에서 반복하는 동안 목록을 수정하면 예기치 않은 동작이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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