Come posso enumerare() su una lista di tuple in Python?

Ho un po ‘ di codice come questo:

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’è un enumerare() funzione che può prendere cura di “i” variabile per me:

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

Tuttavia, io non riesco a capire come combinare le due cose: Come faccio a utilizzare enumerare quando l’elenco 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?

  • enumerare vs itertools: che cosa dobbiamo prendere in considerazione quando si sceglie tra di loro?
InformationsquelleAutor mike | 2009-05-11

 

3 Replies
  1. 93

    Questo è un buon modo per farlo:

    letters = [('a', 'A'), ('b', 'B')]
    for i, (lowercase, uppercase) in enumerate(letters):
        print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
    • Che cosa è questo? Voglio cercare di più su questa sintassi.
    • Se si intende l’assegnazione di (lowercase, uppercase), si chiama “spacchettamento”.
  2. 4

    Questo è come mi piacerebbe farlo:

    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 è il modo più compatto, che può funzionare o meno a seconda del caso:

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

    Si può fare in questo modo troppo:

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

Lascia un commento