Question

J'ai un code comme ceci:

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 ya une fonction enumerate () 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 fait de tuples? Est-ce que je dois le faire?

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

Ou est-il une façon plus élégante?

Était-ce utile?

La solution

Ceci est une belle façon de le faire:

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

Autres conseils

Voilà comment 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: décompactage devient redondant. Ceci est une façon plus compacte, ce 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

Vous pouvez le faire trop:

letters = [('a', 'A'), ('b', 'B')]
for i, letter in enumerate(letters):
    print "Letter #%d is %s/%s" % (i, letter[0], letter[1])
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top