목록에서 항목을 제거할 때 잘못된 반복
목록을 반복하고 루프 내에서 항목을 제거할 때 예기치 않은 동작이 발생할 수 있습니다. 다음 코드를 고려해보세요:
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
letters.remove(i)
print(letters)
이 코드는 예상대로 모든 항목을 제거하는 대신 다음과 같은 결과를 출력합니다.
['b', 'd', 'f', 'h', 'j', 'l']
이상해 보이는 이 동작은 Python 문서에 설명되어 있습니다.
[I]t는 루프에서 반복되는 시퀀스를 수정하는 것이 안전하지 않습니다. 반복 중인 목록을 수정해야 하는 경우 복사본을 반복해야 합니다.
이 특정한 경우 항목을 제거한 후 반복 변수 i가 업데이트되어 다음 항목의 인덱스가 생성됩니다. 건너뛸 루프입니다.
정확한 항목 제거를 위해 다시 작성
이 동작을 수정하려면 목록 복사본을 반복하거나 다른 방법을 사용하여 항목을 제거해야 합니다. . 다음 세 가지 옵션이 있습니다.
del letters[:]
letters[:] = []
letters = []
또는 조건에 따라 특정 항목을 제거해야 하는 경우 컴프리헨션 또는 filter() 함수:
letters = [letter for letter in letters if letter not in ['a', 'c', 'e', 'g', 'i', 'k']]
letters = list(filter(lambda letter: letter not in ['a', 'c', 'e', 'g', 'i', 'k'], letters))
이 지침을 따르면 Python의 목록에서 항목을 정확하고 효율적으로 제거할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3