2024-04-24 10:24:55 发布
网友
我试图找出一个单词在字符串中出现的次数。
word = "dog" str1 = "the dogs barked"
我使用以下方法来计算发生的次数:
count = str1.count(word)
问题是我想要一个完全匹配的。所以这个句子的计数是0。 有可能吗?
使用列表理解:
>>> word = "dog" >>> str1 = "the dogs barked" >>> sum(i == word for word in str1.split()) 0 >>> word = 'dog' >>> str1 = 'the dog barked' >>> sum(i == word for word in str1.split()) 1
split()返回一个句子中所有单词的列表。然后我们使用列表理解来计算单词在一个句子中出现的次数。
split()
可以使用^{}将句子转换为单词列表:
a = 'the dogs barked'.split()
这将创建列表:
['the', 'dogs', 'barked']
然后,您可以使用^{}计算精确出现的次数:
a.count('dog') # 0 a.count('dogs') # 1
如果需要使用标点符号,可以使用正则表达式。例如:
import re a = re.split(r'\W', 'the dogs barked.') a.count('dogs') # 1
如果你想提高效率:
import re count = sum(1 for _ in re.finditer(r'\b%s\b' % re.escape(word), input_string))
这不需要创建任何中间列表(与split()不同),因此对于较大的input_string值有效。
input_string
它还有正确使用标点符号的好处——它将正确返回1作为短语"Mike saw a dog."的计数(而无参数split()则不会)。它使用\bregex标志,它在单词边界上匹配(在\wa.k.a[a-zA-Z0-9_]和其他任何东西之间的转换)。
1
"Mike saw a dog."
\b
\w
[a-zA-Z0-9_]
如果需要担心ASCII字符集以外的语言,可能需要调整regex以正确匹配这些语言中的非单词字符,但对于许多应用程序,这将是一个过度复杂的过程,在许多其他情况下,为regex设置unicode和/或locale标志就足够了。
使用列表理解:
split()
返回一个句子中所有单词的列表。然后我们使用列表理解来计算单词在一个句子中出现的次数。可以使用^{} 将句子转换为单词列表:
这将创建列表:
然后,您可以使用^{} 计算精确出现的次数:
如果需要使用标点符号,可以使用正则表达式。例如:
如果你想提高效率:
这不需要创建任何中间列表(与
split()
不同),因此对于较大的input_string
值有效。它还有正确使用标点符号的好处——它将正确返回
1
作为短语"Mike saw a dog."
的计数(而无参数split()
则不会)。它使用\b
regex标志,它在单词边界上匹配(在\w
a.k.a[a-zA-Z0-9_]
和其他任何东西之间的转换)。如果需要担心ASCII字符集以外的语言,可能需要调整regex以正确匹配这些语言中的非单词字符,但对于许多应用程序,这将是一个过度复杂的过程,在许多其他情况下,为regex设置unicode和/或locale标志就足够了。
相关问题 更多 >
编程相关推荐