我是一个相对缺乏经验的程序员(但总体来说非常有经验),我正在寻求提高我的Python技能(我选择的语言)。我已经用Python编写了一些有用的工具,但我真的希望将我的编程/脚本编写到一个新的水平。我理解逻辑,但缺乏对大部分库的熟悉。我一直在Python中练习简单的编程任务,我最近的实践示例是一个函数,它接受一个字符串和一个子字符串,并输出字符串中子字符串的出现次数:
from re import match
def MyFunc(string, substring):
n = len(substring)
substring_count = 0
x = 0
for char in string:
if match(substring, string[x:x+n]):
substring_count = substring_count + 1
x = x + 1
return substring_count
这是一种有效的方法吗?我的代码特别是Pythonish吗?我还尝试了另一种不使用正则表达式的解决方案,但并没有那么成功。
答案 0 :(得分:2)
使用字符串count
方法获取主要内容中的替代次数。
string.count(s, sub[, start[, end]])
返回字符串s [start:end]中substring sub出现的次数(非重叠)。开始和结束的默认值以及负值的解释与切片相同。
e.g。
>>> a = "aabbbffgghhtt"
>>> a.count("ab")
1
>>> a.count("b")
3
>>> a.count("x")
0
>>>
答案 1 :(得分:1)
使用正则表达式进行非重叠搜索:
import re
def MyFunc(s, sub):
return len(re.compile(re.escape(sub)).findall(s))
重叠:
def MyFunc(s, sub):
n, m = len(sub), len(s)
return sum(sub == s[i:i + n] for i in range(m - n + 1))
您想要解决的问题是Knuth Morris Pratt algorithm更有效地完成的任务。
答案 2 :(得分:0)
如果您只想使用内置的python函数来使用自己的函数,请使用:
def MyFunc(string, substring):
return string.count(substring)