請看下面的代碼,並解釋爲什麼str.count('')
方法和len(str)
函數給出兩個不同的輸出。爲什麼str.count('')和len(str)給出不同的輸出?
a=''
print(len(a))
print(a.count(''))
輸出:
0
1
請看下面的代碼,並解釋爲什麼str.count('')
方法和len(str)
函數給出兩個不同的輸出。爲什麼str.count('')和len(str)給出不同的輸出?
a=''
print(len(a))
print(a.count(''))
輸出:
0
1
str.count()
計數的子串的非重疊出現:
返回非重疊出現串子的數目。
恰好有一個這樣的地方,字符串''
出現在字符串''
:正好在開頭。所以計數應該返回1
。一般來說,空字符串會匹配在的所有位置給定的字符串中,包括正確的開始和結束,因此計數應始終是長度加1:
>>> (' ' * 100).count('')
101
這是因爲空字符串被認爲存在於一個字符串的所有字符之間;所以對於字符串長度2,有3個空字符串;一個在開始時,一個在兩個角色之間,一個在結尾。
所以,是的,結果是不同的,它們是完全正確的。
我不知道,如果「恰好有一個這樣的地方,子串''在字符串''中出現:在開始處右邊。「是正確的方式來表達它。 CPython似乎特殊情況下的'len(substr)== 0'和[return'len(str)+ 1'](https://github.com/python/cpython/blob/master/Objects/stringlib/count .h#L16) –
@ JimFasarakis-Hilliard:我不確定你是否已經完全閱讀了我的答案,但我確切地說明了代碼的作用。 –
對於我來說,在傳遞空字符串時應該返回什麼'count()是相當不清楚的。如何計算出現次數是一個慣例問題,我認爲爲這種情況拋出一個「ValueError」是合理的。 「非重疊」意味着兩個出現點的交集是空字符串,因此如果在索引0處出現兩個空字符串,它們實際上是非重疊的。 –
爲什麼*應該*他們給出相同的輸出?空字符串中有一個空字符串。一個空字符串的長度爲0. –
那麼,爲什麼a =''<---(這裏我給了兩個空格)是給3個空字符串,長度是2?感謝您的回覆@MartijnPieters – liberal
因爲在開始與第一個空間之間有一個空字符串,第一個與第二個空間之間有一個空字符串,最後一個空格與結束之間有一個空字符串。 –