我想弄清楚为什么在运行此代码时我得到一个空列表。目标是获取一个字符串,找到任何元音的索引并将该索引附加到列表中。索引从1开始而不是零。任何可能发生错误的提示都会很棒!如果您有通知疏忽,请通知我。相对较新的python。谢谢
def vowel_indices(word):
vowels = ["a", "e", "i", "o", "u"]
vowel_idx = []
word.lower()
for idx, letter in enumerate(word, start = 1):
if letter == vowels:
vowel_idx.append(idx)
return vowel_idx
答案 0 :(得分:1)
if letter == vowels:
应为if letter in vowels:
元音是一个列表,一个字符串永远不能等于一个列表,你也应该将返回值移出循环,因为这会在第一次循环时停止该函数的跟踪
答案 1 :(得分:1)
方法lower
不会修改字符串就地(字符串不可变),所以你应该这样做:
word = word.lower()
然后,要检查vowels
列表中字符的成员资格,您应该使用in
运算符,而不是==
:
if letter in vowels:
然后return
语句不应该放在for
循环中,因为这会使函数在第一次迭代后立即返回,这不是你想要的:
for idx, letter in enumerate(word, start = 1):
if letter in vowels:
vowel_idx.append(idx)
return vowel_idx
另外请注意,使用列表理解可以减少冗长并执行整个操作:
def vowel_indices(word):
return [idx for idx, l in enumerate(word.lower(), 1) if l in vowels]
答案 2 :(得分:1)
效果很好
def vowel_indices(word):
vowels = ["a", "e", "i", "o", "u"]
word.lower()
indexes = [index for c,index in zip(word,range(len(word))) if c in vowels]
print(indexes)