我正在試圖查找字符串中單詞出現次數。查找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