如何使用Python查找字符串中的首个字母重复多少次?

时间:2019-02-20 16:54:25

标签: python

这个看似简单的问题正在困扰我一段时间,以为有人可能会有所帮助。

我有一个简单的字符串

s = 'AAABCAA'

如何查找第一个字母“ A”的重复次数? 答案应该是3。

我尝试过:

from collections import Counter
c = Counter(s)

但是,这给出的是'A'= 5,而不是3。

4 个答案:

答案 0 :(得分:5)

您可以使用带有break语句的for循环。

s = 'AAABCAA'
counter=0
firstletter=s[0]
for each in s:
    if each==firstletter:
        counter+=1
    else:
        break
print(counter)

这只会返回3

或者,您可以返回字符串的第一个元素的索引,该索引与字符串的第一个字符不同:

import numpy as np
s = 'AAABCAA'
firstletter=s[0]
checklist=[(each==firstletter)*1 for each in s]
print(np.where(np.asarray(checklist)==0)[0][0])

在这种情况下,使用列表理解([(each==firstletter)*1 for each in s]),我们会生成一个列表:

[1, 1, 1, 0, 0, 1, 1]

无论该位置的字符与字符串的第一个字符相同,其值为1。 然后,np.where(np.asarray(checklist)==0)[0][0]会给您这个新创建的列表的第一个0(即第一个字符与起始字符不同)的索引。

答案 1 :(得分:4)

您可以使用函数groupby()查找所有字母组,然后可以使用next()从迭代器中获取第一个字母组:

from itertools import groupby

s = 'AAABCAA'

sum(1 for _ in next(groupby(s))[1])
# 3

或者,您可以使用函数takewhile()

from itertools import takewhile

sum(1 for _ in takewhile(lambda x: x == s[0], s))
# 3

最后您可以使用正则表达式:

import re

len(re.search(r'^(\w)\1+', s, flags=re.MULTILINE).group(0))
# 3

答案 2 :(得分:3)

这是一个使用列表补偿的简短解决方案。当然,可读性不是这里的目标:)

repetitions = lambda str, letter: [i + 1 for i, num in enumerate(str) if num == letter][-1]

示例:

str = 'BBBBC'
letter = 'B'

repetitions(str, letter) # 4

str = 'AABC'
letter = 'A'

repetitions(str, letter) # 2

答案 3 :(得分:1)

如果通常要在字符串中查找模式,请使用suffix tree