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

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

Patricia Arquette
풀어 주다: 2024-12-04 18:11:12
원래의
981명이 탐색했습니다.

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

순회하는 동안 목록에서 제거

목록을 반복하고 요소를 제거할 때 Python의 동작은 혼란스러울 수 있습니다. 아래 코드 조각은 다음과 같습니다.

a = list(range(10))
remove = False
for b in a:
    if remove:
        a.remove(b)
    remove = not remove
print(a)
로그인 후 복사

예상된 [0, 2, 4, 6, 8] 대신 [0, 2, 3, 5, 6, 8, 9]를 출력합니다.

반복적 제거 이해 동작

이 출력은 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
                   ^
로그인 후 복사

나머지 질문 해결

  1. 오류 표시: Python에서는 오류가 발생하지 않습니다. 런타임 오버헤드가 발생하기 때문입니다. 프로그래머가 반복 중에 목록 수정의 결과를 알고 그에 따라 처리한다고 가정합니다.
  2. 역사적 동작: 이 동작은 Python 초기 버전(최소 1.4)부터 존재했으며, 이는 변경 가능한 시퀀스가 ​​일반적으로 구현되는 방식과 일치합니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿