Como posso enumerar () ao longo de uma lista de tuplas em Python?
Pergunta
Eu tenho algum 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
Eu tenho dito que há uma função enumerate () que pode cuidar do "i" variável para mim:
for i, l in enumerate(['a', 'b', 'c']):
print "%d: %s" % (i, l)
No entanto, eu não consigo descobrir como combinar os dois: Como faço para usar enumerar quando a lista em questão é feito de tuplas? Eu tenho que fazer isso?
letters = [('a', 'A'), ('b', 'B')]
for i, tuple in enumerate(letters):
(lowercase, uppercase) = tuple
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
Ou há uma maneira mais elegante?
Solução
Esta é uma maneira elegante de fazê-lo:
letters = [('a', 'A'), ('b', 'B')]
for i, (lowercase, uppercase) in enumerate(letters):
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
Outras dicas
Isto é como eu faria isso:
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: descompactação torna-se redundante. Esta é uma forma mais compacta, que pode funcionar ou não dependendo do seu 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
Você pode fazer isso muito:
letters = [('a', 'A'), ('b', 'B')]
for i, letter in enumerate(letters):
print "Letter #%d is %s/%s" % (i, letter[0], letter[1])
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow