Python 计算字符串中的子字符串出现次数
我想用python编写一个循环,检查0-2中的前三个字母是否为某个单词,然后检查1-3中的下一个字母是否为同一个单词 这是到目前为止我的代码,它总是在任何输入后打印出1Python 计算字符串中的子字符串出现次数,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
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参数一起使用…)