每个item
是一个完整的字符串。 AH1
不会在"aeiouAEIOU"
中找到,因为在元音字符串中没有这样的子字符串。
您也正在重置每个子列表总共num_vowels
,因此您只会在返回值时获取最后一个元素的总数。
你可以循环每个元音和单独测试这些:
def count_vowels(lst):
num_vowels = 0
for sublist in lst:
for item in sublist:
for vowel in "aeiouAEIOU":
if vowel in item:
num_vowels += 1
break
return num_vowels
我使用的名称,而不是lst
的list
不掩盖内置类型。当您确定项目中确实至少存在一个元音时,break
结束for vowel
循环。
这并不是那么高效。
def count_vowels(lst):
num_vowels = 0
for sublist in lst:
for item in sublist:
item = item.lower()
for vowel in "aeiou":
if vowel in item:
num_vowels += 1
break
return num_vowels
你可以使用一套交叉口找到,如果有一个与元音交集:
def count_vowels(lst):
num_vowels = 0
vowels = set('aeiou')
for sublist in lst:
for item in sublist:
if vowel.intersection(item.lower())
num_vowels += 1
return num_vowels
或者您可以通过lowercasing该项目,并只为小写元音测试减少测试次数使用带发生器表达式的any()
function;它将执行与for
循环相同的操作,其中break
;退出时早匹配的元音已经发现:
def count_vowels(lst):
num_vowels = 0
for sublist in lst:
for item in sublist:
item = item.lower()
if any(vowel in item for vowel in "aeiou")
num_vowels += 1
return num_vowels
如果使用sum()
function可以折叠计算的话到
def count_vowels(lst):
vowels = set('aeiou')
return sum(1
for sublist in lst
for item in sublist
if vowel.intersection(item.lower()))
那么究竟是怎么回事?你得到什么输出,你期望得到什么? – 2015-03-30 19:57:38
不要使用'list'作为参数。 – 2015-03-30 19:59:00
@MartijnPieters我越来越0,当我应该得到2. – Ingrid 2015-03-30 20:01:54