単語からすべての母音を削除する関数を書いています。Python forループがすべての項目をループしていない
def remove_vowels(word):
vowels = ['a', 'e', 'i', 'o', 'u']
word = list(word)
for letter in word:
print('Looking for letter {}'.format(letter))
if letter.lower() in vowels:
try:
word.remove(letter)
except ValueError:
pass
return ''.join(word)
私はそれは、単語のすべての文字を通過、それは母音の配列である場合は、各文字をチェックし、もしそうなら、それを削除することを期待:それはこのようになります。
ただし、すべての文字をチェックしているようではありません。たとえば、次の呼び出しのために:
print(remove_vowels('perception'))
私は次のような出力になっています:何らかの理由で
Looking for letter p
Looking for letter e
Looking for letter c
Looking for letter e
Looking for letter t
Looking for letter i
Looking for letter n
prcpton
を、それがr
、二p
とo
をスキップします。私は他の言葉と同様の結果を得ています。なぜこうなった?
'word.remove(手紙は)'母音を削除し、あなたは同じ 'word'リストを反復しているため。今では 'index 'が異なっています。新しいリストに要素を追加してみてください。 – sinsuren
[反復中にリストから項目を削除する]の可能な複製(http://stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating) – McGrady