gpt4 book ai didi

python - 将字符串拆分为连续的计数?

转载 作者:太空狗 更新时间:2023-10-30 02:03:24 24 4
gpt4 key购买 nike

例如,如果给定的字符串是这样的:

"aaabbbbccdaeeee"

我想说的是:

3 a, 4 b, 2 c, 1 d, 1 a, 4 e

在 Python 中使用强力循环很容易做到,但我想知道是否有更 Pythonic/更简洁的单行方法。

我的蛮力:

while source!="":
leading = source[0]
c=0
while source!="" and source[0]==leading:
c+=1
source=source[1:]
print(c, leading)

最佳答案

使用 Counter无论位置如何,计算字符串中每个不同字母的数量:

>>> s="aaabbbbccdaeeee"
>>> from collections import Counter
>>> Counter(s)
Counter({'a': 4, 'b': 4, 'e': 4, 'c': 2, 'd': 1})

您可以使用 groupby如果字符串中的位置有意义:

from itertools import groupby
li=[]
for k, l in groupby(s):
li.append((k, len(list(l))))

print li

打印:

[('a', 3), ('b', 4), ('c', 2), ('d', 1), ('a', 1), ('e', 4)]

可以简化为列表理解:

[(k,len(list(l))) for k, l in groupby(s)]

您甚至可以使用正则表达式:

>>> [(m.group(0)[0], len(m.group(0))) for m in re.finditer(r'((\w)\2*)', s)] 
[('a', 3), ('b', 4), ('c', 2), ('d', 1), ('a', 1), ('e', 4)]

关于python - 将字符串拆分为连续的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32469124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com