查找字符串中元音的数量

find number of vowels in a string

我有一串字母作为输入。
输入:

my_str = 'soumendra_in_Whosebug'

我想要如下输出。应在字典中打印所有元音及其相应计数的位置。
需要输出:

{'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'] }

您可以使用 str.count 并因此编写字典推导式:

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

但这会导致枚举 my_str 五次 次。然而,就像 @DSM 所说的那样,.count(..) 通常工作得相当快(我的猜测是它是在解释器级别实现的,因此它不必 "iterate" 遍历集合)。

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

  1. 它的设计目的就是为了计数,而且它将数据包装到一个接口中,该接口将强制执行约束(除非 Counter 中存在错误,计数肯定是正确的,而定制的算法仍然会出现 "silly" 错误,是的,这不太可能,但最好避免这种情况);和
  2. 它提供了一个很好的界面来用这些计数做各种事情(例如 counter1 & counter2 将构造一个新的 Counter,具有 最小值 每个元素的计数)。