计数字符在 Python 中重复
Count character repeats in Python
我正在编写一个 Python 程序,我需要一些方法来计算 X 或一段 X 在字符串中出现的次数。因此,例如,如果输入为 aaaXXXbbbXXXcccXdddXXXXXeXf
,则输出应为 5,因为字符串中有 5 段 X。
在 Perl 中,我会按如下方式完成此操作。
my $count =()= $str =~ m/X+/g;
我熟悉Python中的re.search
命令,但我不知道如何计算结果数,我不确定这是否是最有效的方法在 Python.
中解决我的问题
我的最高优先级是readability/clarity;效率是次要的。
这应该有效:
prev = None
count = 0
for letter in string:
if letter == 'X' and prev != 'X':
count += 1
prev = letter
您可以为此使用 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
我正在编写一个 Python 程序,我需要一些方法来计算 X 或一段 X 在字符串中出现的次数。因此,例如,如果输入为 aaaXXXbbbXXXcccXdddXXXXXeXf
,则输出应为 5,因为字符串中有 5 段 X。
在 Perl 中,我会按如下方式完成此操作。
my $count =()= $str =~ m/X+/g;
我熟悉Python中的re.search
命令,但我不知道如何计算结果数,我不确定这是否是最有效的方法在 Python.
我的最高优先级是readability/clarity;效率是次要的。
这应该有效:
prev = None
count = 0
for letter in string:
if letter == 'X' and prev != 'X':
count += 1
prev = letter
您可以为此使用 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