查找字符串中的元音数量

时间:2018-09-22 16:18:42

标签: python dictionary-comprehension

我输入了一串字母。
输入:

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 :(得分:7)

您可以使用str.count来编写字典理解:

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

但是这导致枚举my_str 5 次。就像@DSM所说的那样,.count(..)通常工作得相当快(我猜是它是在解释器级别实现的,因此不必在集合中“迭代”)。

我个人认为Counter会更好,因为

  1. 它是专为计数事物而设计的,此外,它还将数据包装到将强制执行约束的接口中(除非Counter中存在错误,计数绝对是正确的,而自定义制定的算法仍然可能会出现“愚蠢”错误,是的,这种情况很少发生,但是最好还是避免这种情况);和
  2. 它提供了一个不错的界面来处理这些计数(例如counter1 & counter2将构造一个新的Counter,每个元素的 minimum 个计数) 。