Come faccio a enumerare () su una lista di tuple in Python?
Domanda
Ho un po 'di codice in questo modo:
letters = [('a', 'A'), ('b', 'B')]
i = 0
for (lowercase, uppercase) in letters:
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
i += 1
Mi è stato detto che c'è una funzione enumerate (), che può prendersi cura della variabile "i" per me:
for i, l in enumerate(['a', 'b', 'c']):
print "%d: %s" % (i, l)
Tuttavia, non riesco a capire come combinare i due: come faccio ad usare elencare quando la lista in questione è fatto di tuple? Devo fare questo?
letters = [('a', 'A'), ('b', 'B')]
for i, tuple in enumerate(letters):
(lowercase, uppercase) = tuple
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
O c'è un modo più elegante?
Soluzione
Questo è un modo pulito per farlo:
letters = [('a', 'A'), ('b', 'B')]
for i, (lowercase, uppercase) in enumerate(letters):
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
Altri suggerimenti
Ecco come lo farei:
import itertools
letters = [('a', 'A'), ('b', 'B')]
for i, lower, upper in zip(itertools.count(),*zip(*letters)):
print "Letter #%d is %s/%s" % (i, lower, upper)
EDIT: disimballaggio diventa ridondante. Questo è un modo più compatto, che potrebbe funzionare o meno a seconda del caso d'uso:
import itertools
letters = [('a', 'A'), ('b', 'B')]
for i in zip(itertools.count(),*zip(*letters)):
print "Letter #%d is %s/%s" % i
Si può fare in questo modo anche:
letters = [('a', 'A'), ('b', 'B')]
for i, letter in enumerate(letters):
print "Letter #%d is %s/%s" % (i, letter[0], letter[1])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow