为了账号安全,请及时绑定邮箱和手机立即绑定

计算Python中一个字符在一行中重复了多少次

计算Python中一个字符在一行中重复了多少次

芜湖不芜 2021-08-17 17:10:52
我目前正在尝试解决在 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 resword="aabc"print (repeating(word))给定的输出应该是 {'aa': 2, 'b': 1, 'c' : 1},但我得到 {'aa': 2, 'b': 1}我该如何解决这个问题?
查看完整描述

2 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

在这种情况下,您可以使用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})


查看完整回答
反对 回复 2021-08-17
?
九州编程

TA贡献1785条经验 获得超4个赞

我会建议使用计数器从collections模块。它正是您想要实现的目标


from collections import Counter


wourd = "aabc"

print(Counter(word))

# Counter({'a': 2, 'b': 1, 'c': 1})

但是如果你想自己实现它,我应该知道那str是一个 Iterable。因此,您可以使用简单的循环遍历每个字母。


此外,还有一个叫做defaultdict 的东西,它在这种情况下非常方便。通常,您必须检查是否已经定义了一个键(在这种情况下是一个字母)。如果不是,您必须创建该密钥。如果您使用的是 a 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}) 


查看完整回答
反对 回复 2021-08-17
  • 2 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信