반모음 기능에서 특정 제거를 무시하는 루프
이 코드에서는 모든 모음을 제거하는 반모음 기능을 만드는 것을 목표로 합니다. 주어진 문자열. 그러나 "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 중국어 웹사이트의 기타 관련 기사를 참조하세요!