web-dev-qa-db-fra.com

Comment énumérer () sur une liste de tuples en python?

J'ai du code comme celui-ci:

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

On m'a dit qu'il y a une fonction énumérée () qui peut prendre soin de la variable "i" pour moi:

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

Cependant, je ne peux pas comprendre comment combiner les deux: comment puis-je utiliser énumérer lorsque la liste en question est faite de tuples? Dois-je faire ça?

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

Ou y a-t-il un moyen plus élégant?

45
mike

Ceci est une solution soignée de le faire:

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

C'est comme ça que je le ferais:

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: Le déballage devient redondant. Ceci est une manière plus compacte, qui pourrait fonctionner ou non en fonction de votre cas d'utilisation:

import itertools

letters = [('a', 'A'), ('b', 'B')]
for i in Zip(itertools.count(),*Zip(*letters)):
    print "Letter #%d is %s/%s" % i
4
Algorias

Vous pouvez faire cela aussi:

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