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

有没有一种简单的方法来获取单词中重复字符的数量?

有没有一种简单的方法来获取单词中重复字符的数量?

红糖糍粑 2021-08-11 17:33:05
我正在尝试获取一个单词中任何字符重复的次数。重复必须是连续的。例如,带有输入的方法"loooooveee"应该返回 6(4 次 'o',2 次 'e')。我正在尝试实现字符串级别的函数,我可以这样做,但是有没有一种简单的方法可以做到这一点?正则表达式,或其他类型的东西?
查看完整描述

3 回答

?
繁星coding

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

原问题: order of repetition does not matter

您可以用总字母数减去唯一字母的数量。set应用于字符串将返回唯一的字母集合。


x = "loooooveee"

res = len(x) - len(set(x))  # 6

或者您可以使用collections.Counter,从每个值中减去 1,然后sum:


from collections import Counter


c = Counter("loooooveee")


res = sum(i-1 for i in c.values())  # 6

新问题: repetitions must be sequential

您可以使用itertools.groupby对连续的相同字符进行分组:


from itertools import groupby


g = groupby("aooooaooaoo")

res = sum(sum(1 for _ in j) - 1 for i, j in g)  # 5

为避免嵌套sum调用,您可以使用itertools.islice:


from itertools import groupby, islice


g = groupby("aooooaooaoo")

res = sum(1 for _, j in g for _ in islice(j, 1, None))  # 5


查看完整回答
反对 回复 2021-08-11
?
呼啦一阵风

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

我认为你的代码正在比较错误的东西


您首先找到最后一个字符:


char = text[-1]

然后将其与自身进行比较:


for i in range(1, len(text)):

    if text[-i] == char: #<-- surely this is test[-1] to begin with?

为什么不直接遍历字符:


def measure_normalized_emphasis(text):

    char = text[0]

    emphasis_size = 0

    for i in range(1, len(text)):

        if text[i] == char:

            emphasis_size += 1

        else:

            char = text[i]


    return emphasis_size

这似乎有效。


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号