我正在试图查找字符串中单词出现次数。查找python中字符串中单词的出现次数3
word = "dog"
str1 = "the dogs barked"
我用下面的计算的出现:
count = str1.count(word)
的问题是我想完全匹配。所以这句话的计数是0. 这可能吗?
我正在试图查找字符串中单词出现次数。查找python中字符串中单词的出现次数3
word = "dog"
str1 = "the dogs barked"
我用下面的计算的出现:
count = str1.count(word)
的问题是我想完全匹配。所以这句话的计数是0. 这可能吗?
如果你想提高效率:
import re
count = sum(1 for _ in re.finditer(r'\b%s\b' % re.escape(word), input_string))
这并不需要创建任何中间列表(不像split()
),从而将有效地工作了大input_string
值。
它也有标点符号正常工作的好处 - 它会正确地返回1
作为计数的短语"Mike saw a dog."
(而一个argumentless split()
不会)。它使用\b
正则表达式标志,该标志匹配字边界(在\w
之间转换,也可以是其他任何东西)。
如果您需要担心ASCII字符集以外的语言,您可能需要调整正则表达式以适当地匹配那些语言中的非单词字符,但对于许多应用程序而言,这会是过度复杂化,并且在许多其他情况下设置正则表达式的unicode和/或locale标志就足够了。
使用列表理解:
>>> 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()
返回一个句子中所有的单词的列表。然后,我们使用列表理解来计算单词出现在句子中的次数。
您可以使用str.split()
了句转换成一个单词列表:
a = 'the dogs barked'.split()
这将创建一个列表:
['the', 'dogs', 'barked']
可以再算上使用list.count()
确切发生的数量:
a.count('dog') # 0
a.count('dogs') # 1
如果需要使用标点符号,哟你可以使用正则表达式。例如:
import re
a = re.split(r'\W', 'the dogs barked.')
a.count('dogs') # 1
您需要将句子拆分为单词。因为你比如你可以做到这一点,只需
words = str1.split()
但对于真正的单词的用法你需要的东西更先进,也负责处理标点符号。对于大多数西方语言,在做str1.split()
之前,您可以用空格替换所有标点符号。
在简单的情况下,这也适用于英语,但请注意,“我”将被分成两个词:“我”和“米”,它实际上应该分成“我”和“上午”。但是这对于这个应用程序来说可能是过度的。
对于其他情况,例如亚洲语言或真实世界中的英语使用情况,您可能希望使用一个为您分词的库。
然后你有一个单词列表,你可以做
count = words.count(word)
哈哈,现在这个没有理由被压低了。我怀疑孩子气。 ;-)但是我已经有超过20k了,所以我不介意,只好低头。 –
现在只要说,我没有downvote。 – TerryA
好的,我很高兴听到这个消息。 –
import re
word = "dog"
str = "the dogs barked"
print len(re.findall(word, str))
下面是一个简单的例子,我们可以将新单词替换所期望的字,也为出现的所需数量:
import string
def censor(text, word):<br>
newString = text.replace(word,"+" * len(word),text.count(word))
print newString
print censor("hey hey hey","hey")
输出将是:+++ +++ +++
所述第一参数在函数中是search_string。 第二个是new_string,它将取代你的search_string。 第三次也是最后一次是发生次数。
什么是
? –
RetroCode
让我们考虑一下s = "suvotisuvojitsuvo"
的例子。 如果你想计数不同的计数“suvo”和“suvojit”,那么你使用count()方法...计数不同,即你不计算suvojit suvo ..只计算孤独的“suvo” 。
suvocount = s.count("suvo") // #output: 3
suvojitcount = s.count("suvojit") //# output : 1
然后找到你必须从suvojit计数中否定的孤独的suvo计数。
lonelysuvo = suvocount - suvojicount //# output: 3-1 -> 2
这将是我与评论的帮助下解决方案:
word = str(input("type the french word chiens in english:"))
str1 = "dogs"
times = int(str1.count(word))
if times >= 1:
print ("dogs is correct")
else:
print ("your wrong")
像一个魅力工作!不知道为什么有一个downvote。你能解释一下究竟发生了什么或我在哪里可以找到这个?我从来没有看到一个带下划线的for循环。谢谢! – lost9123193
@ lost9123193'_'经常用作循环中的占位符:)。我相信Amber可以更好地解释它:p – TerryA
@ lost9123193 - '_'只是一个虚拟变量,这是一种说法,“我实际上并不关心这里的价值”。在这种情况下,我正在使用它,因为我们总是总结数字1;我们并不关心从're.finditer()'返回的匹配对象。 – Amber