반복 중 목록에서 항목 제거 - 일반적인 관용구가 실패하는 이유
프로그래밍에서는 목록을 반복하여 제거하는 것이 일반적인 관행입니다. 필요에 따라 항목. 그러나 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) print(letters)</code>
이 코드는 목록. 놀랍게도 코드의 출력은 빈 목록이 아니라 원래 목록의 다른 모든 항목을 포함합니다.
['b', 'd', 'f', 'h', 'j', 'l']
설명
그 이유는 다음과 같습니다. 동작은 반복 중에 Python이 목록 수정을 처리하는 데 있습니다. 문서에는 다음과 같이 명확하게 나와 있습니다.
"루프에서 반복되는 시퀀스를 수정하는 것은 안전하지 않습니다. [...] 반복 중인 목록을 수정해야 하는 경우 [...] 반복해야 합니다. over a copy."
제공된 코드에서는 반복하면서 목록 문자를 수정하려고 합니다. 이 상황을 처리하기 위한 Python의 설계는 제거할 때마다 다른 모든 항목을 건너뛰면서 반복이 진행되는 것입니다.
코드 다시 작성
이 문제를 피하려면 코드는 다음과 같아야 합니다. 목록을 반복하기 전에 목록의 복사본을 생성하도록 다시 작성되었습니다. 이를 수행하는 방법에는 여러 가지가 있습니다.
또는 조건에 따라 특정 항목을 제거하는 것이 목표인 경우 filter() 함수를 사용하여 새 목록을 만드는 것이 더 효율적입니다. 원하는 항목만 포함된 목록입니다. 이 접근 방식을 사용하면 원본 목록의 복사본을 반복할 필요가 없습니다.
위 내용은 Python에서 목록을 반복하고 제거하면 예기치 않은 결과가 발생할 수 있는 이유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!