Как найти количество гласных в списке слов?

#python #python-3.x

#python #python-3.x

Вопрос:

Задача состоит в том, чтобы найти количество гласных в каждом слове из списка и вывести словарь с результатами.

Я пробовал этот способ:

 wordsList = ["creativity", "anna", "civic", "apology", "refer", "mistress", "rotor", "mindset"]
dictionary = {}
vowels = "aeoui"
count = 0

for word in wordsList:
    for letter in word:
        if letter in vowels:
            count = count   1
            dictionary[word] = (count)

print(dictionary)
  

Вот на каком этапе я нахожусь, мне нужна помощь, как считать для каждого слова конкретно. Заранее спасибо!
Ожидаемый результат:

 {anna:2} etc.

  

Комментарии:

1. Вам нужно сбросить количество для каждого слова, в противном случае вы включаете количество гласных для всех предыдущих слов. Кроме того, вы должны удалить два уровня отступа в строке, где вы вводите количество в dictionary; и круглые скобки там бессмысленны и также должны быть удалены.

2. Да, большое спасибо!

Ответ №1:

Ваша ошибка заключается в том, что count необходимо инициализировать внутри цикла: вы также можете добавить часть, в которой вы считаете как гласные в верхнем, так и в нижнем регистре.

 wordsList = ["creativity", "anna", "civic", "apology", "refer", "mistress", "rotor", "mindset"]
dictionary = {}
vowels = "aeoui"

for word in wordsList:
    count = 0 # I moved it
    for letter in word:
        if letter.lower() in vowels: # to consider both upper/lower case
            count = count   1
            dictionary[word] = (count)

print(dictionary)
  

Комментарии:

1. О да! Большое спасибо! Очень признателен!

Ответ №2:

Вы можете использовать выражение генератора с проверкой гласности для каждой буквы в слове в sum функции:

 dictionary = {word: sum(letter in 'aeiou' for letter in word) for word in wordsList}
  

dictionary становится:

 {'creativity': 4, 'anna': 2, 'civic': 2, 'apology': 3, 'refer': 2, 'mistress': 2, 'rotor': 2, 'mindset': 2}
  

Комментарии:

1. Спасибо, не подумал об этом таким образом, очень признателен!

Ответ №3:

Попробуйте это. Вы не сбрасывали значение переменной count в 0 в начале проверки следующего слова. Я также исправил отступ в dictionary[word] = count

 wordsList = ["creativity", "anna", "civic", "apology", "refer", "mistress", "rotor", "mindset"]
dictionary = {}
vowels = "aeoui"
count = 0

for word in wordsList:
    count = 0
    for letter in word:
        if letter in vowels:
            count = count   1
    dictionary[word] = count

print(dictionary)
#{'creativity': 4, 'anna': 2, 'civic': 2, 'apology': 3, 'refer': 2, 'mistress': 2, 'rotor': 2, 'mindset': 2}
  

Комментарии:

1. Да, забыл сбросить цикл! Большое спасибо, очень ценится!

2. Отлично. Пожалуйста, поддержите, если ответ помог вам

Ответ №4:

Часто подобные вещи выполняются с использованием понимания на Python. Следующее более идиоматично для Python, чем использование циклов for и переменных counter, и разбивает шаги для вас. (Он также обрабатывает заглавные буквы, преобразуя слово в нижний регистр перед его тестированием.)

 words = ['creativity', 'SpongbUngulator']

vowel_counts = {}
vowels = set('aeiou')
for word in words:
    lowercase_word = word.lower()
    found_vowels = [letter for letter in lowercase_word if letter in vowels]
    vowel_count = len(found_vowels)
    vowel_counts[word] = vowel_count
print(vowel_counts)
  

Стоит отметить, что это set(lowercase_word).intersection(vowels) подскажет вам, какие уникальные гласные есть в каждом слове. Наборы Python заслуживают того, чтобы с ними познакомились.