[Linuxtrent] Python enumerate

  • From: Luca Manini <manini.luca@xxxxxxxxxx>
  • To: Linux Trent <linuxtrent@xxxxxxxxxxxxx>
  • Date: Sun, 19 Sep 2004 20:02:26 +0200

Ciao a tutti,

l'altro giorno non riuscivo a ricordare una comoda feature di Python
(che avrei giurato di aver visto!), ma adesso (sleggiucchiando la doc)
l'ho trovata.  

enumerate accetta un iterable (es: una lista) e restituisce un
iteratore che restituisce delle coppie formate da un indice
progressivo (da zero) e l'oggetto restituito dall'iteratore.  Più
facile da capire con un esempio:

    tmp> cat e.py 

    for c, o in enumerate ( ("foo", 123, str) ):
        print c, o

    tmp> python e.py 
    0 foo
    1 123
    2 <type 'str'>

enumerate (ovvio vantaggio estetico a parte) è più utile di quanto si
possa pensare.  L'alternativa "dei poveri" potrebbe essere:

  oo = .... la lista ...
  cc = len(oo)
  for c in range(cc):
      print c, oo[i]

o per gli amanti della programmazione funzionale:

  for c, o in zip(range(cc), oo):
      print c, o

peccato che non tutte le "sequence" accettano di essere "scorse" via
indice, e che (specie con gli iteratori) non tutte le sequence abbiano
una lunghezza finita (es: l'iteratore count()) o comunque nota (es:
leggere un file riga per riga).

-- 
    bye, Luca
-- 
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: