Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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,我想用python编写一个循环,检查0-2中的前三个字母是否为某个单词,然后检查1-3中的下一个字母是否为同一个单词 这是到目前为止我的代码,它总是在任何输入后打印出1 Count = 0 start = 0 end = start + 2 word = 'dad' string = input('Type in a word') for word in string[start-end]: if word in string: Count = Count + 1

我想用python编写一个循环,检查0-2中的前三个字母是否为某个单词,然后检查1-3中的下一个字母是否为同一个单词

这是到目前为止我的代码,它总是在任何输入后打印出1

Count = 0
start = 0
end = start + 2
word = 'dad'
string = input('Type in a word')

for word in string[start-end]:
    if word in string:
         Count = Count + 1
    start = start + 1

print (Count)
有人能帮我吗

    word = 'dad'
    string = input('Type in a word')
    print (string.count(word))
我想这就是你想要的


我想这就是你想要的

我已经尝试过优化代码。此代码用于重叠,而对于非重叠匹配,则可以使用
count

string = 'dadada'
substring = 'dad'
results = 0
sub_len = len(substring)
for i in range(len(string)):
    if string[i:i+sub_len] == substring:
        results += 1
print results
备选方案

string = 'dadada'
sub = 'dad'
print len([n for n in xrange(len(string)) if string.find(sub, n) == n])
虽然这一过程适合OP,但对于未来的访客来说,最好有提前的替代方案。 如评论部分所述

import re
results = sum(1 for _ in re.finditer('(?=dad)', 'dadada'))
此功能使用正则表达式的正向前瞻查找解决方案使用
sum
for
循环的原因是查找迭代次数,因为
finditer
返回迭代器

用户还可以尝试
len(list(re.finditer(“(?=dad)”,“dadada”)
,它将迭代器转换为list并查找长度

非可再生能源替代方案

string = 'dadada'
sub = 'dad'
print len([n for n in xrange(len(string)) if string.find(sub, n) == n])

这是一个带有自定义方法
find
函数
str
的实现。如果我们删除
len
我们可以得到索引列表。

我已经尝试优化代码。此代码用于重叠,而对于非重叠匹配,则可以使用
count

string = 'dadada'
substring = 'dad'
results = 0
sub_len = len(substring)
for i in range(len(string)):
    if string[i:i+sub_len] == substring:
        results += 1
print results
备选方案

string = 'dadada'
sub = 'dad'
print len([n for n in xrange(len(string)) if string.find(sub, n) == n])
虽然这一过程适合OP,但对于未来的访客来说,最好有提前的替代方案。 如评论部分所述

import re
results = sum(1 for _ in re.finditer('(?=dad)', 'dadada'))
此功能使用正则表达式的正向前瞻查找解决方案使用
sum
for
循环的原因是查找迭代次数,因为
finditer
返回迭代器

用户还可以尝试
len(list(re.finditer(“(?=dad)”,“dadada”)
,它将迭代器转换为list并查找长度

非可再生能源替代方案

string = 'dadada'
sub = 'dad'
print len([n for n in xrange(len(string)) if string.find(sub, n) == n])


这是一个带有自定义方法
find
函数
str
的实现。如果我们删除
len
我们可以得到索引列表。

简单的
字符串.count(word)
有什么问题吗?你到底在查什么?你能给出一个输入示例和你期望的输出吗?你从不更新循环中的
end
变量,这可能就是它停止计数为1的原因。我不确定你在问什么,但请注意
string[start-end]
不是获取
字符串的子字符串
的正确语法,该子字符串从
开始
结束
。在行之间读取-您是否最终尝试查找目标字符串中子字符串的出现次数(包括重叠)?例如
dad
dadad
中出现两次(而不是
str.count
,后者将为您提供1…)?简单的
字符串.count(word)
有什么问题吗?您能再详细说明一下吗?你到底在查什么?你能给出一个输入示例和你期望的输出吗?你从不更新循环中的
end
变量,这可能就是它停止计数为1的原因。我不确定你在问什么,但请注意
string[start-end]
不是获取
字符串的子字符串
的正确语法,该子字符串从
开始
结束
。在行之间读取-您是否最终尝试查找目标字符串中子字符串的出现次数(包括重叠)?例如
dad
dadad
中出现两次(而不是
str.count
,它将改为1…)?这适用于非重叠匹配。不适用于重叠匹配。这适用于非重叠匹配。不适用于重叠的一项或类似的内容:
results=sum(1表示在re.finditer(“(?=dad)”,“dadada'))
agree-allow-results=len(list(re.finditer(“(?=dad)”,“dadada'))True,但是没有必要在那里建立一个包含所有匹配对象的列表来计算它的长度,当我们只需要计数时…re.findall也可以使用,尽管我确信很多不同的方法可以用于上下文。认为要坚持循环。你想让我更新答案吗?如果你愿意,你可以添加其他方法-由你决定。请注意-我希望OP可能会使用类似于您建议的方法。。。(或者甚至可以使用带有起始参数的
str.index
)或者类似的东西:
results=sum(1表示在re.finditer(“(?=dad)”,“dadadad'))
agree-allow-results=len(list(re.finditer(“(?=dad)”,“dadada'))True,但是没有必要在那里建立一个包含所有匹配对象的列表来计算它的长度,当我们只需要计数时…re.findall也可以使用,尽管我确信很多不同的方法可以用于上下文。认为要坚持循环。你想让我更新答案吗?如果你愿意,你可以添加其他方法-由你决定。请注意-我希望OP可能会使用类似于您建议的方法。。。(或者甚至可以将
str.index
与start参数一起使用…)