當我遇到這個問題時,我正在解決一個問題。讓我通過一個簡單的例子來解釋:
a = ['hello', 'world']
print(a.count('hello')) #prints 1 correctly
但...
a = "hello world"
for i in a.split():
print(a.count(i))
#prints
#2 -> for 'hello' which is wrong, one more than actual value
#1 -> counts of elements from 2nd onwards are correct
如果我split以前,它完美地作業:
a = 'hello world'
a = a.split()
for i in a:
print(a.count(i))
#correctly prints
1
1
所以我認為這個問題只發生在我split直接在 for 回圈中使用該方法時,但我不確定為什么。
編輯:
我重新檢查了它,它為長陳述句列印了錯誤的值,特別是對于這個。請使用以下宣告進行檢查:
“每個單詞在這句話中出現多少次單詞乘以每個單詞”
編輯2:
即使我直接在 for 回圈中拆分字串,它也沒有更改原始字串,并且我在 for 回圈內對原始字串使用 count 方法,這導致錯誤和“如何”出現兩次。
感謝用戶 Bobby,正確指出。
uj5u.com熱心網友回復:
它在我的機器上使用 Python 3.10.0 運行良好。我在每個例子中都得到 1s。請提供更多資訊,例如 Python 版本,也許我們會知道它在您的機器上運行的原因。
uj5u.com熱心網友回復:
在您的第一個示例a中,從未更新過。即使在 for 回圈中,您也拆分了a但沒有更新a。您可以直接驗證這一點:
a = "hello world"
for i in a.split():
print(a)
print(a.count(i))
如果您想要拆分字串,您需要像在第一個示例中那樣將其保存到變數中。如果需要,您可以在 for 回圈中執行此操作:
a = "hello world"
for i in b:=a.split():
print(b.count(i))
uj5u.com熱心網友回復:
count計算引數在串列中出現的次數。所以對于你的第一個例子:
a = ['hello', 'world']
print(a.count('hello'))
你好只在串列中出現一次。
a = ['hello', 'hello', 'world', 'hello', 'world']
print(a.count('hello')
會回傳 3。
uj5u.com熱心網友回復:
該函式count在字串上使用時會迭代整個字串以進行任何匹配。它不在乎“詞”。
"abc".count("ab") # 1
從檔案:
str.count(sub[, start[, end]])
回傳 [start, end] 范圍內子字串 sub 的非重疊出現次數。可選引數 start 和 end 被解釋為切片符號。
在您的第一個示例中,您count在字串上使用。
然而,當在串列上使用時,它不會在專案之間進行部分匹配:
["a", "b", "c"].count("ab") # 0
從檔案:
list.count(x)
回傳 x 在串列中出現的次數。
這就是您在第二個示例中所做的。你用count在一個串列上。發生這種情況是因為str.split回傳一個串列。
所以這是您正在使用的兩種不同的計數方法。一個用于字串(第一個示例 -a是字串),一個用于串列(第二個示例 -a是從 回傳的串列str.split)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/394045.html
上一篇:提高用資料填充熊貓資料框的速度
