如何计算给定子字符串在Python字符串中出现的次数?
例如:
>>> 'foo bar foo'.numberOfOccurrences('foo')
2
若要获取子字符串的索引,请参见如何查找子字符串的所有出现?。
如何计算给定子字符串在Python字符串中出现的次数?
例如:
>>> 'foo bar foo'.numberOfOccurrences('foo')
2
若要获取子字符串的索引,请参见如何查找子字符串的所有出现?。
当前回答
带列表理解的一行代码怎么样?从技术上讲,它有93个字符长,不需要PEP-8的纯粹性。正则表达式。Findall答案是最易读的,如果它是一段高级代码。如果您正在构建低级别的东西,并且不想要依赖关系,那么这个方法非常简洁。我给出了重叠的答案。很明显,如果没有重叠的话,使用最高分的答案。
def count_substring(string, sub_string):
return len([i for i in range(len(string)) if string[i:i+len(sub_string)] == sub_string])
其他回答
对于一个有空格分隔的简单字符串,使用Dict会非常快,请参阅下面的代码
def getStringCount(mnstr:str, sbstr:str='')->int:
""" Assumes two inputs string giving the string and
substring to look for number of occurances
Returns the number of occurances of a given string
"""
x = dict()
x[sbstr] = 0
sbstr = sbstr.strip()
for st in mnstr.split(' '):
if st not in [sbstr]:
continue
try:
x[st]+=1
except KeyError:
x[st] = 1
return x[sbstr]
s = 'foo bar foo test one two three foo bar'
getStringCount(s,'foo')
根据你的真正意思,我提出以下解决方案:
你的意思是一个空格分隔子字符串的列表,并想知道所有子字符串中的子字符串位置编号是什么: S = 'sub1 sub2 sub3' s.split () .index(“sub2”) > > > 1 你的意思是子字符串在字符串中的char-position: s.find(“sub2”) > > > 5 你的意思是su-bstring的(非重叠)外观计数: s.count(“sub2”) > > > 1 s.count(“子”) > > > 3
2+其他人已经提供了这个解决方案,我甚至投票了其中一个,但我的可能是新手最容易理解的。
def count_substring(string, sub_string):
slen = len(string)
sslen = len(sub_string)
range_s = slen - sslen + 1
count = 0
for i in range(range_s):
if string[i:i+sslen] == sub_string:
count += 1
return count
s = 'arunununghhjj'
sb = 'nun'
results = 0
sub_len = len(sb)
for i in range(len(s)):
if s[i:i+sub_len] == sb:
results += 1
print results
如果你想数整个字符串,这是可行的。
stri_count="If you're looking to count the whole string this can works"
print(len(stri_count))