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"我被困了一段时间。
答案 0 :(得分:2)
你的if语句正在查看s的一个子集。为了回答你的另一个问题,这里有一个更简单的方法,比if语句更改:
这是python的正则表达式库
import re
嵌入式语句搜索' bob'的所有非重叠实例。并返回一个列表,每个匹配作为一个元素;外部语句只计算列表中元素的数量
len(re.findall('bob',s))
答案 1 :(得分:1)
以下代码搜索每个'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
答案 2 :(得分:1)
如果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
答案 3 :(得分:1)
使用enumerate()
s = "abobabobabob"
n = len([i for i, w in enumerate(s) if s[i:i+3] == "bob"])
print ('times bob occurs is:', n)
如果右边的字符+两个字符等于&#34; bob&#34;这将检查字符串s
中的每个字符(按索引i
)。
关于你的secundary问题:
在你的例子中:
s[i-1 : i+2]
是指字符串中字符的索引(i
),其中s[0]
是第一个字符,而s[i-1 : i+2]
是 slice 字符串s
,从当前字符-1
(左边的那个)到当前字符+2
(右边的第二个字符)。