"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python 목록을 반복할 때 항목 제거를 피해야 하는 이유는 무엇입니까?

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

2024년 11월 18일에 게시됨
검색:185

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

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

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

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
    letters.remove(i)

이상하게도 최종 편지 인쇄에서는 다른 모든 항목만 제거된 것으로 나타났습니다.

이상 현상의 이유

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

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

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

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

  • del 문자[:] 목록 객체에 대한 모든 요소와 참조를 삭제합니다.
  • letters[:] = [] 기존 변수에 새 빈 목록을 할당합니다. , 원본 개체에 대한 참조는 그대로 유지합니다.
  • letters = [] 새 빈 목록을 만들고 새 개체에 할당합니다. 변수.

조건부 항목 제거 처리

항목을 조건부로 제거하려면 [:] 슬라이스 구문을 사용하여 목록의 복사본을 만듭니다.

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

또는 필터 기능을 사용하여 원하지 않는 항목을 제외하십시오:

commands = [cmd for cmd in commands if not is_malicious(cmd)]
릴리스 선언문 이 글은 1729301595에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3