IMO在BABAB中發生了2次子串BAB 爲什麼Python返回1?python爲什麼「BABAB」.count(「BAB」)等於1?
print "BABAB".count("BAB")
任何幫助,將理解
IMO在BABAB中發生了2次子串BAB 爲什麼Python返回1?python爲什麼「BABAB」.count(「BAB」)等於1?
print "BABAB".count("BAB")
任何幫助,將理解
每the documentation(重點煤礦):
返回的數目非重疊的範圍出現串 子的[開始,結束]。可選參數開始和結束被解釋爲切片符號。
字符串是「BABAB」。通過使用count()它將返回如下所示的非重疊匹配的數目:「BAB | AB」,因此它只會計數一次。嘗試使用字符串「BABBAB」,您將得到2個數字。例如:
>>> x = "BABAB"
>>> x.count("BAB")
1
>>> x = "BABBAB"
>>> x.count("BAB")
2
str.count
僅返回number of non-overlapping matches,如果你想獲得所有比賽的數量包括重疊的比賽,你可以使用正則表達式與re.findall
>>> re.findall(r'(?=(BAB))',"BABAB")
['BAB', 'BAB']
而對於計算匹配的數量,您可以使用內的發電機表達sum
功能和用途re.finditer
代替re.findall
其更存儲器的使用的術語優化:
>>> sum(1 for _ in re.finditer(r'(?=(BAB))',"BABAB"))
2
(?=(BAB))
爲符合其隨後BAB
的地方,一個positive look-ahead。
'count'只能找到非重疊的匹配項。 – thefourtheye
找到我在找什麼:http://stackoverflow.com/questions/2970520/string-count-with-overlapping-occurrences – Gnuz
@Gnuz也許做**之前**問下次研究 – jonrsharpe