반복 중 목록에서 항목 제거의 위험성 이해
반복하는 동안 목록에서 모든 요소를 제거하려는 시도에서, 사용자는 예상치 못한 동작을 경험할 수 있습니다. 이 문제를 설명하는 코드 조각을 살펴보겠습니다.
<code class="python">letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'] for i in letters: letters.remove(i) print(letters)</code>
이상하게도 이 코드의 출력은 ['b', 'd', 'f', 'h', 'j', 'l입니다. ']. 모든 요소를 제거하는 대신 다른 모든 요소를 제거한 것 같습니다.
근본 원인
이러한 경우 Python의 목록 이해는 다르게 동작합니다. 문서에 명시되어 있듯이 "루프에서 반복되는 시퀀스를 수정하는 것은 안전하지 않습니다." 반복하는 동안 목록에서 요소를 제거하면 다음 요소의 인덱스가 올바르지 않게 됩니다. 결과적으로 루프는 요소를 건너뛰고 관찰된 패턴으로 이어집니다.
안전한 대안
목록에서 모든 요소를 안전하게 제거하려면 다음과 같은 몇 가지 옵션이 있습니다.
del 사용: 이 접근 방식은 모든 요소를 제거하고 빈 목록을 남깁니다.
<code class="python">del letters[:]</code>
문자 사용 [:] = []: 이전 목록을 버리고 새로운 빈 목록을 만듭니다:
<code class="python">letters[:] = []</code>
새 목록 할당: 이렇게 하면 별도의 개체:
<code class="python">letters = []</code>
목록 필터링: 요소를 선택적으로 제거할 때는 목록 복사본을 반복하는 것이 좋습니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!