>  기사  >  백엔드 개발  >  Python 목록을 반복할 때 항목 제거를 피해야 하는 이유는 무엇입니까?

Python 목록을 반복할 때 항목 제거를 피해야 하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-19 11:16:29573검색

When Iterating Through a Python List, Why Should You Avoid Removing Items?

Python 목록: 반복 중 항목 제거의 함정

항목을 동시에 제거하는 동시에 Python 목록을 반복하면 예기치 않은 동작이 발생할 수 있습니다. 주목할만한 예는 다음과 같습니다.

<code class="python">letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
    letters.remove(i)</code>

이상하게도 최종 편지 인쇄에서는 다른 모든 항목만 제거되었음을 나타냅니다.

이상 현상의 이유

이 동작은 Python이 반복 중에 반복 가능 항목에 대한 수정을 처리하는 방식에서 비롯됩니다. 문서에는 반복되는 시퀀스를 수정하는 것이 일반적으로 안전하지 않다고 명시되어 있습니다. 특히 목록과 같은 변경 가능한 유형의 경우 더욱 그렇습니다.

이러한 관행은 향후 Python 빌드에서 정의되지 않은 동작과 잠재적인 변경으로 이어질 수 있습니다.

모든 항목을 제거하는 올바른 접근 방식

목록에서 모든 항목을 안전하게 제거하려면 다음 방법 중 하나를 사용하십시오.

  • del 문자[:]를 사용하여 모두 삭제 목록 개체에 대한 요소 및 참조.
  • letters[:] = [] - 기존 변수에 새 빈 목록을 할당하고 원래 개체에 대한 참조는 그대로 유지합니다.
  • letters = [] 새 빈 목록을 생성하고 이를 새 변수에 할당합니다.

조건부 항목 제거 처리

항목을 조건부로 제거하려면 [:] 슬라이스 구문을 사용하여 나열:

<code class="python">commands = ["ls", "cd", "rm -rf /"]
for cmd in commands[:]:
    if "rm " in cmd:
        commands.remove(cmd)</code>

또는 필터 기능을 사용하여 원하지 않는 항목을 제외합니다:

<code class="python">commands = [cmd for cmd in commands if not is_malicious(cmd)]</code>

위 내용은 Python 목록을 반복할 때 항목 제거를 피해야 하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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