繁体   English   中英

如何查找字符串中单词的字符出现的总数?

[英]How to find the total number of occurrences of the characters of a word in a string?

我是Python的新手,我想在字符串中找到一个子字符串。

例如,如果我有一些常量字母的子字符串,例如:

substring = 'sdkj'

还有一些字母的字符串,例如:

string = 'sdjskjhdvsnea'

我想做一个计数器,以便在字符串中找到的任何字母SDKJ都将递增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会给你的所有(非重叠)出场名单substringstring

>>> 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM