我目前正在尝试解决在Python中连续计算重复字符的问题。
此代码有效,直到出现字符串中的最后一个不同字符为止,我不知道如何解决此问题
def repeating(word):
count=1
tmp = ""
res = {}
for i in range(1, len(word)):
tmp += word[i - 1]
if word[i - 1] == word[i]:
count += 1
else :
res[tmp] = count
count = 1
tmp = ""
return res
word="aabc"
print (repeating(word))
给定的输出应为{'aa':2,'b':1,'c':1}, 但我得到{'aa':2,'b':1}
我该如何解决?
答案 0 :(得分:0)
我建议您使用collections
模块中的Counter。它正是您要实现的目标
from collections import Counter
wourd = "aabc"
print(Counter(word))
# Counter({'a': 2, 'b': 1, 'c': 1})
但是,如果您想自己实现它,我应该知道str
是一个Iterable。因此,您可以通过一个简单的循环遍历每个字母。
此外,还有一种名为defaultdict的东西,在这种情况下非常方便。通常,您必须检查是否已定义键(在这种情况下为字母)。如果不是,则必须创建该密钥。如果您使用的是defaultdict
,则可以定义每个新键的默认值均为
from collections import defaultdict
def repeating(word):
counter = defaultdict(int)
for letter in word:
counter[letter] += 1
return counter
结果将类似于:
In [6]: repeating('aabc')
Out[6]: defaultdict(int, {'a': 2, 'b': 1, 'c': 1})
答案 1 :(得分:0)
在这种情况下,您可以使用collections.Counter来为您完成所有工作。
>>> from collections import Counter
>>> Counter('aabc')
Counter({'a': 2, 'c': 1, 'b': 1})
您也可以迭代字符串中的字母,因为这是可迭代的。但是然后,我将使用集合中的defaultdict保存在“计数”部分。
>>> from collections import defaultdict
>>>
>>> def repeating(word):
... res = defaultdict(int)
... for letter in word:
... res[letter] +=1
... return res
...
>>> word="aabc"
>>> print (repeating(word))
defaultdict(<type 'int'>, {'a': 2, 'c': 1, 'b': 1})