найти количество гласных в строке - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть строка букв в качестве ввода.
input:

my_str = 'soumendra_in_stackoverflow'

Я хочу вывод, как показано ниже.Где все гласные должны быть напечатаны вместе с их соответствующим количеством в словаре.
необходим вывод :

{'a': 2, 'e': 2, 'i': 1, 'o': 3, 'u': 1}

Для этого я написал следующую программу:

ans_dict = {}
for letter in my_str:
    if letter in ['a', 'e', 'i', 'o', 'u']:
        ans_dict[letter] = ans_dict.get(letter, 0) + 1
print(ans_dict)

Работает.Тем не менее, как написать эту же логику в одну строку (возможно, с использованием словарного понимания) без использования collections.Counter?
Я пробовал это, но это не удается.

{x: + 1 for x in a if x in ['a', 'e', 'i', 'o', 'u'] }

1 Ответ

0 голосов
/ 22 сентября 2018

Вы можете использовать str.count и, таким образом, написать словарь для понимания:

result = { v: my_str.count(v) for v in "aeiou" }

Но это, таким образом, приводит к перечислению в my_str пять раз.Однако, как говорит @DSM, .count(..) обычно работает довольно быстро (я предполагаю, что оно реализовано на уровне интерпретатора, поэтому ему не нужно «перебирать» коллекцию).

Лично я думаю, чтоCounter здесь было бы лучше, так как

  1. он предназначен именно для подсчета вещей, и, кроме того, он оборачивает данные в интерфейс, который будет вводить ограничения (если вCounter, подсчеты определенно будут правильными, в то время как пользовательский алгоритм все еще может иметь «глупую» ошибку, да, это очень маловероятно, но все же лучше этого избежать);и
  2. предоставляет удобный интерфейс для выполнения всех видов операций с этими счетами (например, counter1 & counter2 создаст новый Counter с количеством минимум каждого элемента).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...