python - 计算字符串中 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"
解决方案
正如我在评论中所说,您忘记在循环后添加最后一个计数:
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'
推荐阅读
- java - onRequestPermission / onActivityResult Android Studio 出错
- javascript - 使用 Ajax 和 vanilla JS 调用特定的 php 函数
- windows-10 - Windows 10 更改强调色开始菜单和应用程序背景
- android - 如何将滚动视图布局划分为多个固定大小的视图,以便在 Android 中创建多页 PDF
- c# - TypeDescriptor ConvertFromInvariantString 抛出异常?
- neo4j - Neo4J (Cypher) 查询以查找所有不遵循模式的路径
- c# - 在 ASP.NET Core 3.0 MVC 中通过 ViewData 多选发送数据
- java - 用一个循环 foreach 两个不同的对象
- javascript - 用 Node Js、Socket.Io 制作机器人
- expo - 安装依赖项后是否可以发布博览会?