>백엔드 개발 >파이썬 튜토리얼 >Python에서 반복하는 동안 목록 내의 문자열을 어떻게 안전하게 수정할 수 있습니까?

Python에서 반복하는 동안 목록 내의 문자열을 어떻게 안전하게 수정할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-20 14:46:23160검색

How Can I Safely Modify Strings Within a List During Iteration in Python?

안전하게 목록 반복 및 수정

문제:

Python for 루프 중에 목록을 수정하는 것은 일반적으로 권장되지 않습니다. 그러나 목록 내의 문자열을 수정해야 하는 경우에는 어떻게 해야 합니까? 이러한 변경 가능한 값을 바꾸는 것은 금지된 수정으로 간주됩니까?

답변:

이미 반복된 목록 내의 요소를 수정하는 한, 수정된 것으로 간주됩니다. 허용됩니다. 예:

a = ['a',' b', 'c ', ' d ']

for i, s in enumerate(a):
    a[i] = s.strip()

print(a) # -> ['a', 'b', 'c', 'd']

이 코드는 목록 a를 반복하고 각 문자열에서 공백을 제거합니다. 새 목록을 생성하여 원본에 할당하지 않고 이 작업을 수행합니다.

그러나 반복 중에 목록의 항목 수를 변경하는 것은 위험합니다. 예를 들어:

b = ['a', ' b', 'c ', ' d ']

for i, s in enumerate(b):
    if s.strip() != b[i]: # leading or trailing whitespace?
        del b[i]

print(b) # -> ['a', 'c '] # WRONG!

이 코드는 목록 b에서 선행 또는 후행 공백이 있는 요소를 삭제하려고 시도합니다. 불행히도 요소를 삭제하면 후속 반복의 색인 생성이 중단되기 때문에 실패합니다.

주의:

설명된 대로 목록의 요소를 안전하게 수정할 수 있다는 점에 유의하는 것이 중요합니다. , 요소 수를 늘리거나 줄이려고 하면 오류가 발생할 수 있습니다. 동작.

내부 삭제:

반복 중에 항목을 효과적으로 삭제하려면 목록 이해를 사용하세요.

b = ['a',' b', 'c ', ' d ']

b[:] = [entry for entry in b if entry.strip() == entry]

print(b) # -> ['a'] # CORRECT

이 코드 선행 또는 후행 공백 없이 항목만 포함하는 새 목록을 생성하여 원하지 않는 요소를 "제자리"에서 효과적으로 제거합니다.

위 내용은 Python에서 반복하는 동안 목록 내의 문자열을 어떻게 안전하게 수정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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