Python 对字符串中匹配的子字符串进行计数
有没有更简单的方法来更改Python 对字符串中匹配的子字符串进行计数,python,Python,有没有更简单的方法来更改if语句?还有,有人能告诉我i-1:i+2是做什么的吗 我写这段代码是为了查找“bob”的出现,我被卡住了一段时间。下面的代码搜索每个'bob'子字符串的开始索引,并将该值添加到数组中。total变量只返回该数组中的值的计数 作为一行: s = "abobabobabob" total = 0 for i in range(len(s)): if s[i-1 : i+2] == 'bob': total += 1 print ('times b
if
语句?还有,有人能告诉我i-1:i+2
是做什么的吗
我写这段代码是为了查找“bob”的出现,我被卡住了一段时间。下面的代码搜索每个
'bob'
子字符串的开始索引,并将该值添加到数组中。total
变量只返回该数组中的值的计数
作为一行:
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))
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))
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))
打印:
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))
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))
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))
——如果您想修改for
循环,这里有一个备选方案:
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))
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))
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))
打印:
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))
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))
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))
下面的代码搜索每个
'bob'
子字符串的起始索引,并将该值添加到数组中。total
变量只返回该数组中的值的计数
作为一行:
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))
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))
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))
打印:
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))
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))
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))
——如果您想修改for
循环,这里有一个备选方案:
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))
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))
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))
打印:
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))
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))
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))
如果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[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
您的if语句正在查看s的子集。为了回答您的另一个问题,这里有一个比if语句更简单的方法: 这是python的正则表达式库
s= "abobabobabob"
print sum( s[i:i+3] =='bob' for i in range(len(s)-2) )
3
嵌入语句搜索“bob”的所有非重叠实例,并返回一个列表,其中每个匹配项都作为一个元素;outer语句只计算列表中的元素数
import re
您的if语句正在查看s的子集。为了回答您的另一个问题,这里有一个比if语句更简单的方法: 这是python的正则表达式库
s= "abobabobabob"
print sum( s[i:i+3] =='bob' for i in range(len(s)-2) )
3
嵌入语句搜索“bob”的所有非重叠实例,并返回一个列表,其中每个匹配项都作为一个元素;outer语句只计算列表中的元素数
import re
使用enumerate()
如果右边的字符+两个字符等于“bob”,则检查字符串s
(通过索引i
)中的每个字符
关于你的第二个问题: 在您的示例中:
s = "abobabobabob"
n = len([i for i, w in enumerate(s) if s[i:i+3] == "bob"])
print ('times bob occurs is:', n)
指字符串中字符的索引(i
),其中s[0]
是第一个字符,而s[i-1:i+2]
是字符串s
的一部分,从当前字符-1
(左边的一个)到当前字符+2
(右边的第二个字符).使用枚举()
如果右边的字符+两个字符等于“bob”,则检查字符串s
(通过索引i
)中的每个字符
关于你的第二个问题: 在您的示例中:
s = "abobabobabob"
n = len([i for i, w in enumerate(s) if s[i:i+3] == "bob"])
print ('times bob occurs is:', n)
指字符串中字符的索引(
i
),其中s[0]
是第一个字符,而s[i-1:i+2]
是字符串s
的一部分,从当前字符-1
(左边的一个)到当前字符+2
(右边的第二个字符).请给你的问题一个更有用的标题。你的缩进搞乱了。在Python中正确使用缩进非常重要。有关s[i-1:i+2]
的含义的解释,请参见。这是一个字符串片段。它也是错误的,应该是s[i:i+3]
。循环应该使用range(len(s)-2)
,这样它就不会试图访问字符串之外的内容。请给你的问题一个更有用的标题。你的缩进搞乱了。在Python中正确使用缩进非常重要。有关s[i-1:i+2]
的含义的解释,请参见。这是一个字符串片段。它也是错误的,应该是s[i:i+3]
。循环应该使用range(len(s)-2)
,这样它就不会试图访问字符串之外的内容。但是由于他使用了for循环,并且存在缩进问题,我是否可以建议向他展示如何使用常规for循环来实现这一点?在解决方案中添加了for循环修改。很好的一行代码+1。但是,由于他使用了for循环,并且存在缩进问题,我是否可以建议向他展示如何使用常规for循环来实现这一点?在解决方案中添加了for循环修改。我尝试了OP的代码,但没有导致错误(在添加了适当的缩进之后)。我很惊讶。@ChadDavis,这不应该。在python中,索引可以是负数。s[-1:2]为空字符串首先在IPython中测试它,然后将脚本放入文件并执行它——仍然有效。使用Python3。这将是值得研究的。@ChadDavis是的,它不应该有任何问题。它是有效的代码我尝试了OP的代码,但没有导致错误(在添加正确的缩进后)。我很惊讶。@ChadDavis,这不应该。在python中,索引可以是负数。s[-1:2]为空字符串首先在IPython中测试它,然后将脚本放入文件并执行它——仍然有效。使用Python3。这将是值得研究的。@ChadDavis是的,它不应该有任何问题。使用EnumeraState()它是有效的代码-您的意思是enumerate吗?@Mr.goosberryaste
ateate
:)谢谢您的提醒!使用EnumeraState()-您的意思是enumerate吗?@Mr.goosberryaste
ateate
:)谢谢您的提醒!