计算一个字符在Python中连续重复多少次

时间:2018-11-14 13:43:44

标签: python if-statement count

我目前正在尝试解决在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}

我该如何解决?

2 个答案:

答案 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})