簡體   English   中英

為什么str.count('')和len(str)給出不同的輸出?

[英]Why are str.count('') and len(str) giving different output?

查看以下代碼,並請解釋為什么str.count('')方法和len(str)函數給出兩個不同的輸出。

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

輸出:

0
1

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

返回substring sub的不重疊出現的次數。

恰好有一個這樣的地方,子串''出現在字符串'' :”的開頭。 因此,計數返回1

一般來說,空字符串將匹配給定字符串中的所有位置 ,包括開始和結尾處的正確位置 ,因此計數應始終為長度加1:

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

這是因為空字符串被認為存在於字符串的所有字符之間。 對於字符串長度2,有3個空字符串; 開頭是一個,兩個字符之間是一個,結尾是一個。

是的,結果是不同的,而且它們是完全正確的。

.count('')計算零長度字符串的位置數。 您也可以將其視為可能的光標位置數。

"test".count('')

 t e s t
^ ^ ^ ^ ^

而不是計算字符數(例如len(str) ),而是計算反字符數。

說明文件

返回范圍為[start,end]的子序列sub的非重疊出現次數。 可選參數start和end解釋為切片表示法。

如果看一下實現 ,我們會發現它調用了函數stringlib_countsource ),該函數繼續運行,並且當子的長度為零時,返回字符串的長度加一:

if (sub_len == 0)
    return (str_len < maxcount) ? str_len + 1 : maxcount;

來源

注意maxcount設置為size_t的最大正值。


當然,這只是一個簡短的提示。 如果我們跳過該檢查,代碼將繼續調用FASTSEARCH

FASTSHEARCH如何實施 它進行循環 ,檢查每個位置是否字符串與該位置的子匹配。

由於它正在尋找一個空字符串,因此它將說它在每個位置都匹配(在每個位置,它都找不到不相同的字符,直到子程序的長度為止)。

請記住,它從頭到尾都在包含范圍內。 這意味着它將在字符串的每個位置查找,即:

  • 開始(第一個字符之前)
  • 在每個字符對之間(在每個字符之后,在下一個字符之前)
  • 結束(最后一個字符之后)

那是每個字符一個位置(在每個字符之前)加一個位置(結尾)。 或者,如果願意,它是每個字符一個位置(在每個字符之后)加一個位置(開始)。 無論哪種情況,它都將返回字符串的長度加一。 開發人員將其短路以避免循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM