有没有办法计算字符串中重复元素的长度和出现次数?

Is there a way to count the length and occurrences of repeated elements in a string?

提问人:Cam 提问时间:2/9/2023 更新时间:2/9/2023 访问量:74

问:

我有这个长字符串:

string = 'FFFFFFFFFFFFFFFFFFFFFABCABCABCBACBCABCBCABCABCBACBFFFFFACBCABCAFFF'

我想计算重复的“F”序列的出现次数及其长度。在此示例中,将有 3 个重复的“F”实例,每个实例的长度分别为 21、5 和 3。

python 序列 重复 字符串长度

评论


答:

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 的组,并将这些组转换为列表,以便能够轻松获取它们的 .groupbylen

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

评论

0赞 Community 2/12/2023
您的答案可以通过其他支持信息进行改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。