Python计数字符串中的字符数

Python计数字符串中的字符数,python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,输入: 输出: abbbbccdddaaabbbbeeff 我试过像下面这样 ab4c2d3a3b4e2f2 但无法打印列表中的最后一个元素 有没有更好的方法不用使用任何内置函数就可以做到这一点 编辑:我想了解打印abb4c2的逻辑。。这就是为什么我提到没有任何内置函数。如果逻辑可以理解,可以使用内置函数。在这些问题中,始终保持当前状态(当前字符和当前计数)。不需要索引,逻辑更简单 最后,不要忘记“刷新”当前循环数据,否则会错过最后一次迭代 我的建议: string = 'abbbbcccc

输入:

输出:

abbbbccdddaaabbbbeeff
我试过像下面这样

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

有没有更好的方法不用使用任何内置函数就可以做到这一点


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

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

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

我的建议:

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
印刷品:

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))
好的,我知道。join(result)调用内置函数,但这是最有效的方法。您不希望逐个字符追加以从列表中创建字符串


一旦证明自己掌握了这些算法,就可以使用内置的工具,如
itertools.groupby
来完成这些工作。它更快而且没有bug(甚至更好:)

你可以使用字典

ab4c2d3a3b4e2f2

输出
a4b8c2d3e2f2
您可以使用
更多工具

从更多itertools导入运行长度
s=“abbbccdddaaabbbeeff”
result=“”
对于字符,运行长度中的num。编码:
结果+=f“{char}{num if num!=1 else'}”
打印(结果)#返回ab4c2d3a3b4e2f2

编辑:错过了关于内置函数的部分。这使用一个外部库。把它留在这里,因为我发现最初的问题非常有趣。

sum
是一个内置函数:)它是否应该是
a1b4c2d3a3b4e2f2
枚举也是内置的fucntion@Jean-弗朗索瓦-法布和不再是一个内置函数——或者根本不是任何函数——如果给它赋值0的话。但是,这是以前的一次,通常应该避免这种赋值,因为代码的其他部分可能依赖于sum作为内置函数。@jean francaois fabre如果我们只想计算字符的出现次数,我们可以使用计数器,对吗?您可以使用
str.count
或使用字典(或a
collections.Counter
)执行此操作将返回每个字母的计数,而不管其位置如何。OP要求连续计数字母:)@nikhildr22输出的格式很重要here@Chris赞成!!我错过了这一部分,如果你问我没关系。你提到的函数也可以作为源代码复制。。。这就像复制我的解决方案一样好:)
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='')