목록에서 항목 제거 시 잘못된 반복
목록을 반복하고 루프 내 항목을 제거할 때 예기치 않은 동작이 발생할 수 있습니다. 다음 코드를 고려하세요.
<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 문서에 설명되어 있습니다.
[I]t는 루프에서 반복되는 시퀀스를 수정하는 것이 안전하지 않습니다. 반복 중인 목록을 수정해야 하는 경우 복사본을 반복해야 합니다.
이 특정한 경우 항목을 제거한 후 반복 변수 i가 업데이트되어 다음 항목의 인덱스가 생성됩니다. 루프를 건너뜁니다.
정확한 항목 제거를 위한 재작성
이 동작을 수정하려면 목록 복사본을 반복하거나 다른 방법을 사용하여 항목을 제거해야 합니다. . 다음 세 가지 옵션이 있습니다.
<code class="python">del letters[:]</code>
<code class="python">letters[:] = []</code>
<code class="python">letters = []</code>
또는 특정 항목을 제거해야 하는 경우 조건을 기반으로 하는 항목의 경우 컴프리헨션이나 filter() 함수를 사용하여 목록을 필터링할 수 있습니다.
<code class="python">letters = [letter for letter in letters if letter not in ['a', 'c', 'e', 'g', 'i', 'k']]</code>
<code class="python">letters = list(filter(lambda letter: letter not in ['a', 'c', 'e', 'g', 'i', 'k'], letters))</code>
이러한 지침을 따르면 Python의 목록에서 정확하고 효율적인 항목 제거를 보장할 수 있습니다. .
위 내용은 루프를 사용하여 목록에서 항목을 제거할 때 예기치 않은 동작을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!