查找字符串中元音的数量
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
会更好,因为
- 它的设计目的就是为了计数,而且它将数据包装到一个接口中,该接口将强制执行约束(除非
Counter
中存在错误,计数肯定是正确的,而定制的算法仍然会出现 "silly" 错误,是的,这不太可能,但最好避免这种情况);和
- 它提供了一个很好的界面来用这些计数做各种事情(例如
counter1 & counter2
将构造一个新的 Counter
,具有 最小值 每个元素的计数)。
我有一串字母作为输入。
输入:
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
会更好,因为
- 它的设计目的就是为了计数,而且它将数据包装到一个接口中,该接口将强制执行约束(除非
Counter
中存在错误,计数肯定是正确的,而定制的算法仍然会出现 "silly" 错误,是的,这不太可能,但最好避免这种情况);和 - 它提供了一个很好的界面来用这些计数做各种事情(例如
counter1 & counter2
将构造一个新的Counter
,具有 最小值 每个元素的计数)。