2016-10-22 114 views
0

請看下面的代碼,並解釋爲什麼str.count('')方法和len(str)函數給出兩個不同的輸出。爲什麼str.count('')和len(str)給出不同的輸出?

a='' 
print(len(a)) 
print(a.count('')) 

輸出:

0 
1 
+2

爲什麼*應該*他們給出相同的輸出?空字符串中有一個空字符串。一個空字符串的長度爲0. –

+0

那麼,爲什麼a =''<---(這裏我給了兩個空格)是給3個空字符串,長度是2?感謝您的回覆@MartijnPieters – liberal

+0

因爲在開始與第一個空間之間有一個空字符串,第一個與第二個空間之間有一個空字符串,最後一個空格與結束之間有一個空字符串。 –

回答

5

str.count()計數的子串的非重疊出現:

返回非重疊出現串的數目。

恰好有一個這樣的地方,字符串''出現在字符串'':正好在開頭。所以計數應該返回1。一般來說,空字符串會匹配在的所有位置給定的字符串中,包括正確的開始和結束,因此計數應始終是長度加1:

>>> (' ' * 100).count('') 
101 

這是因爲空字符串被認爲存在於一個字符串的所有字符之間;所以對於字符串長度2,有3個空字符串;一個在開始時,一個在兩個角色之間,一個在結尾。

所以,是的,結果是不同的,它們是完全正確的。

+3

我不知道,如果「恰好有一個這樣的地方,子串''在字符串''中出現:在開始處右邊。「是正確的方式來表達它。 CPython似乎特殊情況下的'len(substr)== 0'和[return'len(str)+ 1'](https://github.com/python/cpython/blob/master/Objects/stringlib/count .h#L16) –

+1

@ JimFasarakis-Hilliard:我不確定你是否已經完全閱讀了我的答案,但我確切地說明了代碼的作用。 –

+2

對於我來說,在傳遞空字符串時應該返回什麼'count()是相當不清楚的。如何計算出現次數是一個慣例問題,我認爲爲這種情況拋出一個「ValueError」是合理的。 「非重疊」意味着兩個出現點的交集是空字符串,因此如果在索引0處出現兩個空字符串,它們實際上是非重疊的。 –

相關問題