首页 > 解决方案 > 计算字符串中 char 的出现次数

问题描述

嘿伙计们,我正在尝试a4b2c1a2d3使用aaaabbcaaddd. 我认为我下面的代码的问题是我实现以前的计数器的方式。有问题index > 0:吗?

string1 = "aaaabbcaaddd" 
previous = ""
finalstr = ""
finalint = 1
for index, val in enumerate(string1):
    if index > 0:
        previous = string1[index - 1]
        if previous == val:
            finalint += 1
        else:
            finalstr += previous + str(finalint)
            finalint = 1
print(finalstr)

#outputs "a4b2c1a2"

标签: pythonstringpython-3.xfor-loop

解决方案


正如我在评论中所说,您忘记在循环后添加最后一个计数:

finalstr += previous + str(finalint)

但是,除非您将此作为分配的作业,否则有一种更紧凑的解决问题的方法:

from itertools import groupby
''.join(char + str(len(list(group))) for char,group in groupby(string1))
#'a4b2c1a2d3'

您自己的代码可以在没有索引的情况下重写(它们总是会引起麻烦):

cnt = 1
finalstr = ''
for x,y in zip(string1, string1[1:]):
    if x==y:
        cnt += 1
    else:
        finalstr += x + (str(cnt) if cnt > 1 else '')
        cnt = 1
finalstr += x + (str(cnt) if cnt > 1 else '')
finalstr
#'a4b2ca2d3'

推荐阅读