Skip to main content
 首页 » 编程设计

Python计算字符串中的字符数

2025年05月04日27wuhuacong

输入:

abbbbccdddaaabbbbeeff 

输出:

ab4c2d3a3b4e2f2 

我试过如下,

string = 'abbbbccccd' 
 
strList = list(string) 
sum = 0 
 
for i , s in enumerate(string): 
    # print (strList[i],strList[i+1]) 
 
    if strList[i] == strList[i+1]: 
        sum = sum + 1 
        print(strList[i],'****',sum ) 
 
    else: 
        sum = sum + 1 
        print(strList[i],'****',sum ) 
        sum = 0 

但无法打印列表中的最后一个元素。

有没有更好的方法可以在不使用任何内置函数的情况下做到这一点?

编辑:我想了解打印 abb4c2.. 的逻辑。这就是我提到没有任何内置函数的原因。如果逻辑可以理解,使用内置函数是可以的。

请您参考如下方法:

在这些问题中,始终保持当前状态(当前字符和当前计数)。无需索引,逻辑更​​简单。

最后,不要忘记“刷新”当前循环数据,否则您会错过最后一次迭代。

我的建议:

s = "abbbbccdddaaabbbbeeff" 
 
result = [] 
 
current = None 
current_count = 0 
 
 
for c in s: 
    if current == c: 
        current_count += 1 
    else: 
        if current_count > 1: 
            result.append(str(current_count)) 
        current_count = 1 
        current = c 
        result.append(c) 
 
# don't forget last iteration count 
if current_count > 1: 
    result.append(str(current_count)) 
 
print("".join(result)) 

打印:

ab4c2d3a3b4e2f2 

好的,我知道 "".join(result) 会调用内置函数,但这是最有效的方法。您不想逐个字符地追加以从列表中创建字符串。

一旦您证明自己掌握了此类算法,就可以使用 itertools.groupby 等内置工具来完成此类工作。它更快且没有错误(甚至更好:this other answer)