Вы вводите список, но ваша логика подходит только для одной строки:
number_of_vowels('Bean') # [2]
Вам необходимо либо настроить ввод для своей функции, либо изменить свою функцию, чтобы рассчитать количество гласных длякаждый элемент вашего списка.Поскольку вы хотите, чтобы вывод был списком чисел, я предполагаю, что вы ищете второй вариант.
Чтобы сделать это, просто добавьте дополнительное предложение for
в ваше понимание списка:
def number_of_vowels(words):
return [len([letter for letter in word if letter.lower() in vowels]) \
for word in words]
number_of_vowels(names) # [1, 2, 2, 3, 2, 0, 3]
Однако обратите внимание, что промежуточные списки не требуются.Вместо этого вы можете использовать sum
с выражением генератора, используя преимущества фактов True == 1
и False == 0
:
vowels = set('aeiou')
def number_of_vowels(words):
return [sum(letter.lower() in vowels for letter in word) for word in words]
number_of_vowels(names) # [1, 2, 2, 3, 2, 0, 3]
Обратите внимание на пару дополнительных изменений для улучшения вашего алгоритма:
- Проверьте
letter.lower() in vowels
вместо того, чтобы просто создавать список строчных букв.В противном случае гласные как заглавные буквы, например, в «апреле», будут игнорироваться. - Преобразуйте ваши гласные в
set
для O (1) сложности поиска.