我是Python的新手,我想在字符串中找到一个子字符串。
例如,如果我有一些常量字母的子字符串,例如:
substring = 'sdkj'
还有一些字母,如:
string = 'sdjskjhdvsnea'
我想制作一个计数器,以便在字符串中找到任何字母S
,D
,K
和J
,计数器将增加1。例如,对于上面的示例,计数器将为8
。
我怎样才能做到这一点?
答案 0 :(得分:2)
这段代码可以帮到你:
>>> string = 'sdjskjhdvsnea'
>>> substring = 'sdkj'
>>> counter = 0
>>> for x in string:
... if x in substring:
... counter += 1
>>> counter
8
>>>
答案 1 :(得分:1)
修改强>:
当你显然做想要计算整个四字符substring
的外观时,正则表达式可能是最简单的方法:
>>> import re
>>> string = 'sdkjhsgshfsdkj'
>>> substring = 'sdkj'
>>> len(re.findall(substring, string))
2
re.findall
会为您提供substring
中string
的所有(非重叠)外观列表:
>>> re.findall('sdkj', 'sdkjhsgshfsdkj')
['sdkj', 'sdkj']
通常情况下,"查找子字符串'sdkj'
" 意味着尝试找到完整的四字符{{1}的外观} {/ em>在较大的substring
内。在这种情况下,您似乎只想要这四个字母的计数总和:
string
或者,更有效率地使用collections.Counter
:
sum(string.count(c) for c in substring)
这只迭代from collections import Counter
counts = Counter(string)
sum(counts.get(c, 0) for c in substring)
一次,而不是每string
次迭代一次,因此c in substring
而不是O(m+n)
(其中O(m*n)
和{{1} }})。
行动中:
m == len(string)
请注意,您可能希望set(substring)
避免重复计算:
n == len(substring)
答案 2 :(得分:1)
使用re.findall()
的替代解决方案:
>>> import re
>>> substring = 'sdkj'
>>> string = 'sdjskjhdvsnea'
>>> len(re.findall('|'.join(list(substring)), string))
8