La risposta migliore corrente che coinvolge il metodo count
non conta realmente per le occorrenze che si sovrappongono e non si preoccupa anche delle sottostringhe vuote. Per esempio:
>>> a = 'caatatab'
>>> b = 'ata'
>>> print(a.count(b)) #overlapping
1
>>>print(a.count('')) #empty string
9
La prima risposta dovrebbe essere 2
non 1
, se consideriamo le stringhe sovrapposte. Per quanto riguarda la seconda risposta è meglio se una sottostringa vuota restituisce 0 come asnwer.
Il seguente codice si occupa di queste cose.
def num_of_patterns(astr,pattern):
astr, pattern = astr.strip(), pattern.strip()
if pattern == '': return 0
ind, count, start_flag = 0,0,0
while True:
try:
if start_flag == 0:
ind = astr.index(pattern)
start_flag = 1
else:
ind += 1 + astr[ind+1:].index(pattern)
count += 1
except:
break
return count
Ora, quando si eseguirlo:
>>>num_of_patterns('caatatab', 'ata') #overlapping
2
>>>num_of_patterns('caatatab', '') #empty string
0
>>>num_of_patterns('abcdabcva','ab') #normal
2
Cosa si intende per "numero di stringa"? La posizione della sottostringa? Quante volte si verifica la sottostringa? Qualcos'altro? – GreenMatt
Si tratta di un compito a casa? In tal caso, aggiungi il tag "compiti" alla tua domanda. Inoltre, la tua domanda non è molto chiara. Risponderò a quello che sembri chiedere, ma sospetto che tu voglia davvero scoprire qualcos'altro. –
Dopo il commento precedente, potresti voler vedere: [python: come trovare una sottostringa in un'altra stringa] (http://stackoverflow.com/questions/7361253/python-how-to-find-a-substring-in- un'altra stringa) o [Ricorrenze di indicizzazione di base di una sottostringa all'interno di una stringa (python)] (http://stackoverflow.com/questions/6987702/basic-indexing-recurrences-of-a-substring-within-a-string- pitone). Poiché questo sembra un probabile duplicato di uno di questi, sto votando per chiudere. – GreenMatt