¿Cómo puedo enumerar () sobre una lista de tuplas en Python?
Pregunta
Tengo algo de código como el siguiente:
letters = [('a', 'A'), ('b', 'B')]
i = 0
for (lowercase, uppercase) in letters:
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
i += 1
Me han dicho que hay una función enumerate () que puede hacerse cargo de la variable "i" para mí:
for i, l in enumerate(['a', 'b', 'c']):
print "%d: %s" % (i, l)
Sin embargo, no puedo encontrar la manera de combinar los dos: ¿Cómo se utiliza cuando enumerar la lista en cuestión está hecho de tuplas? ¿Tengo que hacer esto?
letters = [('a', 'A'), ('b', 'B')]
for i, tuple in enumerate(letters):
(lowercase, uppercase) = tuple
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
O hay una forma más elegante?
Solución
Esta es una clara forma de hacerlo:
letters = [('a', 'A'), ('b', 'B')]
for i, (lowercase, uppercase) in enumerate(letters):
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
Otros consejos
Esta es la forma en que lo haría:
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: desembalaje se vuelve redundante. Esta es una forma más compacta, lo que podría funcionar o no dependiendo de su caso de uso:
import itertools
letters = [('a', 'A'), ('b', 'B')]
for i in zip(itertools.count(),*zip(*letters)):
print "Letter #%d is %s/%s" % i
Puede hacerlo de esta manera también:
letters = [('a', 'A'), ('b', 'B')]
for i, letter in enumerate(letters):
print "Letter #%d is %s/%s" % (i, letter[0], letter[1])
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow