[Python] Digest di Python, Volume 68, Numero 14

Riccardo Lemmi riccardo a reflab.com
Ven 14 Ott 2011 09:38:58 CEST


Giuseppe Amato wrote:

> Interessa anche a me la cosa
> 
> for i,c in enumerate(leggi):
>>    if c=="a" : print i
>>
>> se stessi cercando una parola intera potrei fare:
> 
> sstr = "apici"
> lsstr=len(sstr)
> for i,c in enumerate(leggi):
>    if c=="a" and leggi[i:i+lsstr]==sstr : print i
> 

Con il codice dovresti esprimere quello che vuoi fare: in questo caso secondo me 
è fuorviante cercare una 'a' e poi la stringa:

sstr = "apici"
lsstr=len(sstr)
for i in range(len(leggi)):
   if leggi[i:i+lsstr]==sstr: print i


> Ma mi conviene rispetto alle altre due proposte? Qual è la più veloce?
> 

Secondo me la versione con le espressioni regolari è la migliore dal punto di 
vista della comprensibilità, ma non ho fatto un controllo sulla velocità che 
puoi fare tu usando timeit:

   http://docs.python.org/library/timeit.html

>> sstr = "sa"
>> lsstr = len(sstr)
>>
>> pos = leggi.find(sstr)
>> print pos
>> while True:
>>    new_pos = leggi.find(sstr, pos+lsstr)
>>    if new_pos == -1:
>>        break
>>    else:
>>        pos = new_pos
>>        print pos
>>
>> oppure
>>
>> import re
>> expr = re.compile('sa')
>> for e in expr.finditer(leggi):
>>    print e.start()
>>
>>
>>
> 

-- 
                                       Riccardo Lemmi



Maggiori informazioni sulla lista Python