2016-07-21 49 views
1

我想弄清楚爲什麼我得到這個代碼運行時的空列表。目標是獲取一個字符串,找到任何元音的索引並將該索引追加到列表中。索引從1開始,而不是0。任何可能發生錯誤的提示都會很棒!如果您發現有一般性疏忽,請告訴我。相對較新的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  

回答

1

if letter == vowels:應該if letter in vowels:

元音是列表和一個字符串可以永遠不等於一個列表,你也應該將回圈外作爲將停止功能,在它的軌道它第一次遍歷

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] 
+0

此外return語句是出地點。 – Alex

+0

@Alex是的,那也是 –

+0

謝謝,爲我澄清了很多! – eeskonivich

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) 
+0

這是行不通的,你爲什麼要使用'zip'? –

+0

zip用於獲取字符的位置和zip結合字和範圍() – Amit

+0

但是你爲什麼要通過'enumerate'使用它? –