我输入了一串字母。
输入:
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'] }
答案 0 :(得分:7)
您可以使用str.count
来编写字典理解:
result = { v: my_str.count(v) for v in "aeiou" }
但是这导致枚举my_str
5 次。就像@DSM所说的那样,.count(..)
通常工作得相当快(我猜是它是在解释器级别实现的,因此不必在集合中“迭代”)。
我个人认为Counter
会更好,因为
Counter
中存在错误,计数绝对是正确的,而自定义制定的算法仍然可能会出现“愚蠢”错误,是的,这种情况很少发生,但是最好还是避免这种情况);和counter1 & counter2
将构造一个新的Counter
,每个元素的 minimum 个计数) 。