>백엔드 개발 >파이썬 튜토리얼 >내 루프가 문자열에서 모음을 제거할 때 모음을 건너뛰는 이유는 무엇입니까?

내 루프가 문자열에서 모음을 제거할 때 모음을 건너뛰는 이유는 무엇입니까?

DDD
DDD원래의
2024-12-12 14:39:10880검색

Why Does My Loop Skip Vowels When Removing Them From a String?

반모음 기능에서 특정 제거를 무시하는 루프

이 코드에서는 모든 모음을 제거하는 반모음 기능을 만드는 것을 목표로 합니다. 주어진 문자열. 그러나 "Hey Look Words!"라는 샘플 텍스트로 테스트하면 "Hy lk Words!"라는 원치 않는 결과가 반환됩니다. 문제는 제거 프로세스 중 두 번째 'o'가 누락된 데 있습니다.

문제의 핵심은 목록을 반복하면서 목록을 수정하여 예상되는 동작을 방해한다는 것입니다. 이 문제를 해결하기 위해 목록의 얕은 복사본을 만들고 대신 반복합니다.

더 명확한 이해를 위해 루프 시작 시 char 및 텍스트 목록을 인쇄할 때 루프 동작을 살펴보겠습니다.

H ['H', 'e', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
e ['H', 'e', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
  ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] # !
l ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
o ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
k ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] # Problem!!
  ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
W ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
o ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] 
d ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
s ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
! ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
Hy lk Words!

보시다시피, 첫 번째 'o'를 제거한 후 목록 인덱스가 향상되어 두 번째 것을 건너뛰어 의도한 항목이 누락되었습니다. 제거.

이 문제를 해결하기 위해 textlist[:]를 사용하여 목록의 복사본을 만듭니다. 이렇게 하면 루프가 정적 목록을 반복하여 원치 않는 건너뛰기를 방지할 수 있습니다.

또한 Python의 목록 이해 기능을 활용하여 보다 간결한 솔루션을 얻을 수 있습니다.

def remove_vowels(text): # An improved function name
    return ''.join(ch for ch in text if ch.lower() not in 'aeiou')

위 내용은 내 루프가 문자열에서 모음을 제거할 때 모음을 건너뛰는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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