Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对字符串中匹配的子字符串进行计数_Python - Fatal编程技术网

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.goosberry
aste
ate
ate
:)谢谢您的提醒!使用EnumeraState()-您的意思是enumerate吗?@Mr.goosberry
aste
ate
ate
:)谢谢您的提醒!