Sou*_*dra 3 python dictionary-comprehension
我有一串字母作为输入.
输入:
my_str = 'soumendra_in_stackoverflow'
Run Code Online (Sandbox Code Playgroud)
我想要输出如下.所有元音都应与字典中的相应计数一起打印.
需要输出:
{'a': 2, 'e': 2, 'i': 1, 'o': 3, 'u': 1}
Run Code Online (Sandbox Code Playgroud)
为此我写了以下程序:
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)
Run Code Online (Sandbox Code Playgroud)
有用.但是,如何在一行中编写相同的逻辑(可能使用字典理解)而不使用collections.Counter?
我试过这个,但它失败了.
{x: + 1 for x in a if x in ['a', 'e', 'i', 'o', 'u'] }
Run Code Online (Sandbox Code Playgroud)
您可以使用str.count并因此编写字典理解:
result = { v: my_str.count(v) for v in "aeiou" }
Run Code Online (Sandbox Code Playgroud)
但这导致my_str 五次计数.就像@DSM所说的那样,.count(..)通常工作得相当快(我的猜测是它是在解释器级别实现的,所以它不必在集合上"迭代").
就个人而言,我认为Counter这里会更好
Counter,计数肯定是正确的,而自定义算法仍然可以有一个"傻" "错误,是的,这是非常不可能的,但最好避免这种情况;" 和counter1 & counter2将构造一个新的Counter,具有每个元素的最小计数).| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |