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

반복 중에 Python 목록에서 요소를 제거하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-01 12:34:10161검색

Why Does Removing Elements from a Python List During Iteration Lead to Unexpected Results?

Python에서 반복 중 목록 제거 이해

목록을 반복하는 동안 요소를 제거해야 할 수도 있습니다. 그러나 그렇게 하면 제거가 올바르게 처리되지 않으면 예기치 않은 동작이 발생할 수 있습니다.

Python 코드를 고려하세요.

a = list(range(10))
remove = False
for b in a:
    if remove:
        a.remove(b)
    remove = not remove
print(a)

이 코드는 출력 [0, 2, 3, 5를 생성합니다. , 6, 8, 9]가 예상되는 [0, 2, 4, 6, 8] 대신에 발생합니다. 이 예외는 Python이 반복하는 동안 변경 가능한 객체를 처리하는 방식으로 인해 발생합니다.

문제에 대한 시각적 설명

작업 순서는 다음과 같이 시각화할 수 있습니다.

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]       | b = 0; remove? no
   ^                              
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]       | b = 1; remove? yes
      ^                           
[0, 2, 3, 4, 5, 6, 7, 8, 9]          | b = 3; remove? no
         ^                        
[0, 2, 3, 4, 5, 6, 7, 8, 9]          | b = 4; remove? yes
            ^                     
[0, 2, 3, 5, 6, 7, 8, 9]             | b = 6; remove? no
               ^                  
[0, 2, 3, 5, 6, 7, 8, 9]             | b = 7; remove? yes
                  ^               
[0, 2, 3, 5, 6, 8, 9]                | b = 9; remove? no
                     ^            

오류 없음 표시

Python은 기본 반복자가 수정될 때 오류를 발생시키지 않습니다. 왜냐하면 돌연변이가 반복자에 언제, 어떻게 영향을 미칠지 결정하려면 광범위한 런타임 분석이 필요하여 실행 속도가 크게 느려지기 때문입니다.

동작 일관성

이 예에 설명된 동작은 여러 버전에서 일관되게 유지되었습니다. Python은 반복 중에 변경 가능한 객체를 수정하는 코드의 예측 가능한 실행을 보장합니다.

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

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