"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 루프를 사용하여 목록에서 항목을 제거할 때 예기치 않은 동작을 처리하는 방법은 무엇입니까?

루프를 사용하여 목록에서 항목을 제거할 때 예기치 않은 동작을 처리하는 방법은 무엇입니까?

2024년 11월 20일에 게시됨
검색:527

How to Handle Unexpected Behavior When Removing Items from Lists Using Loops?

목록에서 항목을 제거할 때 잘못된 반복

목록을 반복하고 루프 내에서 항목을 제거할 때 예기치 않은 동작이 발생할 수 있습니다. 다음 코드를 고려해보세요:

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가 업데이트되어 다음 항목의 인덱스가 생성됩니다. 건너뛸 루프입니다.

정확한 항목 제거를 위해 다시 작성

이 동작을 수정하려면 목록 복사본을 반복하거나 다른 방법을 사용하여 항목을 제거해야 합니다. . 다음 세 가지 옵션이 있습니다.

  1. 전체 목록 삭제:
del letters[:]
  1. 목록을 빈 목록으로 교체:
letters[:] = []
  1. 새 목록 만들기 :
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의 목록에서 항목을 정확하고 효율적으로 제거할 수 있습니다.

릴리스 선언문 이 기사는 1729301716에 재현됩니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3