首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python计数字符串中的字符数

Python计数字符串中的字符数
EN

Stack Overflow用户
提问于 2019-06-03 08:36:51
回答 3查看 129关注 0票数 2

投入:

代码语言:javascript
运行
复制
abbbbccdddaaabbbbeeff

产出:

代码语言:javascript
运行
复制
ab4c2d3a3b4e2f2

我试过如下,

代码语言:javascript
运行
复制
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的逻辑。这就是为什么我提到没有任何内置功能。如果逻辑可以理解的话,可以使用内置的函数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-03 08:44:42

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

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

我的建议:

代码语言:javascript
运行
复制
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))

指纹:

代码语言:javascript
运行
复制
ab4c2d3a3b4e2f2

好的,我知道"".join(result)调用内置函数,但这是最有效的方法。您不希望添加一个字符来从列表中创建字符串。

一旦你证明你掌握了这样的算法,就可以使用内置的itertools.groupby来完成这样的工作。它更快,没有错误(甚至更好:this other answer)

票数 6
EN

Stack Overflow用户

发布于 2019-06-03 09:02:05

你可以用more_itertools

代码语言:javascript
运行
复制
from more_itertools import run_length

s = "abbbbccdddaaabbbbeeff"
result = ""
for char, num in run_length.encode(s):
    result += f"{char}{num if num != 1 else ''}"
print(result) #returns ab4c2d3a3b4e2f2

编辑:遗漏了关于内置函数的部分。这使用了一个外部库。把它留在这里是因为我觉得最初的问题很有趣。

票数 2
EN

Stack Overflow用户

发布于 2019-06-03 08:58:49

你可以用字典

代码语言:javascript
运行
复制
a='abbbbccdddaaabbbbeeff'
d=dict()
for i in a:
      if i not in d:d[i]=1
      else:d[i]+=1
for key,value in d.items():
    print(key,value,sep='',end='')

输出a4b8c2d3e2f2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56423737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档