我正在编写一个Python程序,我需要一些方法来计算字符串中出现X或一段X的次数。因此,例如,如果输入为aaaXXXbbbXXXcccXdddXXXXXeXf
,则输出应为5,因为字符串中有5个X段。
在Perl中我会这样做。
my $count =()= $str =~ m/X+/g;
我熟悉Python中的re.search
命令,但我不知道如何计算结果的数量,我不确定这是否是解决Python问题的最有效方法
我的首要任务是可读性/清晰度;效率是次要的。
答案 0 :(得分:5)
您可以使用itertools.groupby
:
>>> s = "aaaXXXbbbXXXcccXdddXXXXXeXf"
>>> import itertools
>>> sum(e == 'X' for e, g in itertools.groupby(s))
5
这对可迭代中的元素进行分组 - 如果没有给出键函数,它只是对相等的元素进行分组。然后,您只需使用sum
来计算密钥为'X'
的元素。
>>> import re
>>> len(re.findall("X+", s))
5
答案 1 :(得分:1)
这应该有效:
prev = None
count = 0
for letter in string:
if letter == 'X' and prev != 'X':
count += 1
prev = letter