[英]How to find the total number of occurrences of the characters of a word in a string?
我是Python的新手,我想在字符串中找到一个子字符串。
例如,如果我有一些常量字母的子字符串,例如:
substring = 'sdkj'
还有一些字母的字符串,例如:
string = 'sdjskjhdvsnea'
我想做一个计数器,以便在字符串中找到的任何字母S
, D
, K
和J
都将递增1。例如,对于上述示例,计数器将为8
。
我该如何实现?
也许这段代码可以帮助您:
>>> string = 'sdjskjhdvsnea'
>>> substring = 'sdkj'
>>> counter = 0
>>> for x in string:
... if x in substring:
... counter += 1
>>> counter
8
>>>
编辑 :
当你这样做显然是希望整个四字的出场数substring
,正则表达式可能是最简单的方法:
>>> import re
>>> string = 'sdkjhsgshfsdkj'
>>> substring = 'sdkj'
>>> len(re.findall(substring, string))
2
re.findall
会给你的所有(非重叠)出场名单substring
的string
:
>>> re.findall('sdkj', 'sdkjhsgshfsdkj')
['sdkj', 'sdkj']
通常, “查找子字符串'sdkj'
”将意味着尝试在较大的string
找到完整的四字符substring
的外观。 在这种情况下,您似乎只是想要这四个字母的总和:
sum(string.count(c) for c in substring)
或者,更有效地使用collections.Counter
:
from collections import Counter
counts = Counter(string)
sum(counts.get(c, 0) for c in substring)
这只会在string
迭代一次,而不是对子string
中的每个c in substring
迭代一次,因此O(m+n)
而不是O(m*n)
(其中m == len(string)
和n == len(substring)
) 。
实际上:
>>> string = "sdjskjhdvsnea"
>>> substring = "sdkj"
>>> sum(string.count(c) for c in substring)
8
>>> from collections import Counter
>>> counts = Counter(string)
>>> sum(counts.get(c, 0) for c in substring)
8
请注意,您可能希望set(substring)
避免重复计算:
>>> sum(string.count(c) for c in "sdjks")
11
>>> sum(string.count(c) for c in set("sdjks"))
8
使用re.findall()
的替代解决方案:
>>> import re
>>> substring = 'sdkj'
>>> string = 'sdjskjhdvsnea'
>>> len(re.findall('|'.join(list(substring)), string))
8
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.