计算字符串中的一组字符

时间:2016-01-23 23:43:41

标签: python python-3.x

我正在尝试计算一组字符,'qed'在一个字符串中。我的想法是迭代给定字符串中的每个字符,如果N(i),N(i-1),N(i-2)匹配'qed',则更新计数但到目前为止失败。有什么建议?谢谢!

def test(N):
    s = ('qed')
    count = 0
        for i in range(len(N)):
            if N[i] + N[i-1] + N[i-2] == s:
                count = count + 1
        return print(count)
test('qedmlqedlolqed')

5 个答案:

答案 0 :(得分:2)

>>> 'qedmlqedlolqed'.count('qed')
3

编辑:为什么选择downvote?问题是"有任何建议吗?" 我认为这是一个很好的建议。

答案 1 :(得分:2)

修复代码:

def test(N):
    s = 'qed'
    count = 0
    for i in range(len(N)-2):
        if N[i:i+3] == s:
            count += 1
    return count

>>> test('qedmlqedlolqed')
3

或更一般地说:

def test(N, s):
    count = 0
    if s:
        for i in range(len(N)-len(s)+1):
            if N[i:i+len(s)] == s:
                count += 1
    return count

>>> test('qedmlqedlolqed', 'qed')
3
>>> test('qedmlqedlolqed', 'ed')
3
>>> test('qedmlqedlolqed', 'd')
3
>>> test('qedmlqedlolqed', '')
0
>>> test('qedmlqedlolqed', 'lol')
1
>>> test('qedmlqedlolqed', 'rofl')
0

或者,使用str.count()

更容易
>>> 'qedmlqedlolqed'.count('qed')
3

答案 2 :(得分:2)

虽然Stefan的答案最简单明了,但这是另一种使用列表理解的方法

s ='qedmlqedlolqed'

result = len(如果s [i:i + 3] =='qed',则[范围内的i为1(len(s))] (感谢Stefan)

答案 3 :(得分:1)

修复代码:

def test(N):
  s = 'qed'
  count = 0
  for i in range(2, len(N)):
    if N[i-2] + N[i-1] + N[i] == s:
      count = count + 1
  return count
print(test('qedmlqedlolqed'))

或者你可以用qed来计算字符串的后缀数:

def test2(word, sub):
  return sum(1 for i,_ in enumerate(word) if word[i:].startswith(sub))
print(test2('qedmlqedlolqed', 'qed'))

或者你可以直接计算所有子串,并检查你的数量:

import collections
def all_substrings(s):
  for i in range(len(s)):
    for j in range(i, len(s)):
      yield s[i:j+1]

def test3(word, sub):
  return collections.Counter(all_substrings(word))[sub]
print(test3('qedmlqedlolqed', 'qed'))

答案 4 :(得分:0)

重复使用find

>>> text = 'qedmlqedlolqed'
>>> count = index = 0
>>> while True:
        index = text.find('qed', index) + 1
        if not index:
            break
        count += 1

>>> count
3

我选择了+ 1代替+ 3来支持重叠事件('qed'或任何其他"字符集" ,假设你的意思是一个没有重复的字符串。)