提问人:Cam 提问时间:2/9/2023 更新时间:2/9/2023 访问量:74
有没有办法计算字符串中重复元素的长度和出现次数?
Is there a way to count the length and occurrences of repeated elements in a string?
问:
我有这个长字符串:
string = 'FFFFFFFFFFFFFFFFFFFFFABCABCABCBACBCABCBCABCABCBACBFFFFFACBCABCAFFF'
我想计算重复的“F”序列的出现次数及其长度。在此示例中,将有 3 个重复的“F”实例,每个实例的长度分别为 21、5 和 3。
答:
3赞
Samwise
2/9/2023
#1
用:itertools.groupby
>>> string = 'FFFFFFFFFFFFFFFFFFFFFABCABCABCBACBCABCBCABCABCBACBFFFFFACBCABCAFFF'
>>> from itertools import groupby
>>> [len(list(group)) for char, group in groupby(string) if char == "F"]
[21, 5, 3]
groupby
接受任何可迭代对象并形成相等项的组,从而生成项值的单个实例和实际项的“组”可迭代对象的元组。
上面对调用的迭代为您提供了相等的字母组,筛选了字母为 F 的组,并将这些组转换为列表,以便能够轻松获取它们的 .groupby
len
1赞
Unmitigated
2/9/2023
#2
您可以使用正则表达式来匹配特定字符的连续出现。
import re
string = 'FFFFFFFFFFFFFFFFFFFFFABCABCABCBACBCABCBCABCABCBACBFFFFFACBCABCAFFF'
res = [len(s) for s in re.findall('F+', string)]
print(res)
或者,要查找任何字符的连续连续出现:
res = [len(m.group()) for m in re.finditer(r'(.)\1*', string)]
1赞
FredGouldstone
2/9/2023
#3
这是一个非常基本但易于理解的解决方案:
string = "FFFFFFFFFFFFFFFFFFFFFABCABCABCBACBCABCBCABCABCBACBFFFFFACBCABCAFFF"
streak = 0
for i in range(0,len(string)):
if string[i] == "F":
streak = streak + 1
if i == len(string) - 1 or string[i+1] != "F":
print(streak, end=" ")
streak = 0
评论