¿Cómo enumero () sobre una lista de tuplas en Python?

Tengo un código como este:

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 ocuparme de la variable “i” para mí:

 for i, l in enumerate(['a', 'b', 'c']): print "%d: %s" % (i, l) 

Sin embargo, no puedo entender cómo combinar los dos: ¿Cómo uso enumerar cuando la lista en cuestión está hecha 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?

Esta es una buena manera de hacerlo:

 letters = [('a', 'A'), ('b', 'B')] for i, (lowercase, uppercase) in enumerate(letters): print "Letter #%d is %s/%s" % (i, lowercase, uppercase) 

Así es como 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) 

EDITAR: desempaquetar se vuelve redundante. Esta es una forma más compacta, 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 

Puedes 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])