>백엔드 개발 >파이썬 튜토리얼 >Python에서 반복하는 동안 목록 요소를 제거하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?

Python에서 반복하는 동안 목록 요소를 제거하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-25 07:07:09551검색

Why Does Removing List Elements During Iteration in Python Lead to Unexpected Results?

예기치 않은 동작: 반복 중 목록에서 요소 제거

목록을 반복하고 특정 기준을 충족하는 특정 요소를 제거하려고 하면, 반복 프로세스 중에 목록이 수정되면 예기치 않은 동작이 발생할 수 있습니다. 다음 Python 코드를 고려해 보세요.

numbers = list(range(1, 50))

for i in numbers:
    if i < 20:
        numbers.remove(i)

print(numbers)

놀랍게도 결과는 다음과 같습니다.

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]

20 미만의 숫자가 제거될 것으로 예상하지만 결과에는 그대로 남아 있습니다. 이는 반복되는 동안 목록이 수정되기 때문입니다. 첫 번째 요소 1이 제거되면 후속 요소의 위치가 이동하고 루프가 수정된 목록의 다음 요소로 계속 진행되는데, 이는 예상한 요소가 아닙니다.

이 문제를 해결하고 정확하게 목록을 반복하면 목록 이해 또는 내부 변경을 사용할 수 있습니다. 목록 내포를 사용하면 지정된 조건을 충족하는 요소만으로 새 목록을 만들 수 있습니다.

numbers = [n for n in numbers if n >= 20]

또는 슬라이스 할당을 사용하여 내부 변경을 수행할 수 있습니다.

numbers[:] = (n for n in numbers if n >= 20)

이런 방식으로 목록을 수정하면 반복에 영향을 주지 않고 원하는 결과를 얻을 수 있습니다.

위 내용은 Python에서 반복하는 동안 목록 요소를 제거하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.