计算字符串中匹配的子字符串

2024-09-28 03:22:59 发布

您现在位置:Python中文网/ 问答频道 /正文

s = "abobabobabob"
total = 0

for i in range(len(s)):
    if s[i-1 : i+2] == 'bob':
        total += 1

print ('times bob occurs is:' + str(total))

有没有更简单的方法来更改if语句?另外,有人能告诉我i-1 : i+2做什么吗?你知道吗

我写这段代码是为了找到“bob”的出现,我被困了一段时间。你知道吗


Tags: 方法inforlenifisrange语句
3条回答

if语句查看的是s的子集。为了回答您的另一个问题,这里有一个比if语句更简单的方法:

这是python的正则表达式库

import re

嵌入式语句搜索所有不重叠的'bob'实例,并返回一个列表,每个匹配项都作为一个元素;outer语句只计算列表中的元素数

len(re.findall('bob',s))

如果s[i-1:i+2]=“bob”正在检查当前索引-1到当前索引+2是否为“bob”。这会引起问题,因为我从0开始,i-1是列表的最后一个元素

尝试:

s = "abobabobabob"
total = 0

for i in range(1,len(s)):
    if s[i-1 : i+2] == 'bob':
        total += 1

两条线有更好的方法

s= "abobabobabob"
print sum(  s[i:i+3] =='bob' for i in range(len(s)-2) )

3

下面的代码搜索每个'bob'子字符串的起始索引,并将该值添加到数组中。total变量只返回该数组中值的计数。你知道吗

作为一行:

total = 0
s = "abobabobabob"

total = len([i for i in range(len(s)) if s.find('bob', i) == i])

print('times bob occurs is: ' + str(total))

打印:

times bob occurs is: 3

--如果您想修改for循环,这里有一个替代方法:

total = 0
s = "abobabobabob"

for i in range(len(s)):
    if (s.find('bob', i) == i):
        total += 1

print('times bob occurs is: ' + str(total))

打印:

times bob occurs is: 3

相关问题 更多 >

    热门问题