Python 목록: 반복 중 항목 제거의 함정
항목을 동시에 제거하는 동안 Python 목록을 반복하면 예기치 않은 동작이 발생할 수 있습니다. 주목할만한 예는 다음과 같습니다:
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
letters.remove(i)
이상하게도 최종 편지 인쇄에서는 다른 모든 항목만 제거된 것으로 나타났습니다.
이상 현상의 이유
이 동작은 Python이 반복 중에 반복 가능한 항목에 대한 수정을 처리하는 방식에서 비롯됩니다. 문서에는 반복되는 시퀀스를 수정하는 것이 일반적으로 안전하지 않으며 특히 목록과 같은 변경 가능한 유형의 경우 안전하지 않다고 명시되어 있습니다.
이러한 관행은 향후 Python 빌드에서 정의되지 않은 동작과 잠재적인 변경으로 이어질 수 있습니다.
모든 항목을 제거하는 올바른 접근 방식
목록에서 모든 항목을 안전하게 제거하려면 다음 중 하나를 사용하세요. 방법:
조건부 항목 제거 처리
항목을 조건부로 제거하려면 [:] 슬라이스 구문을 사용하여 목록의 복사본을 만듭니다.
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)]
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3