Как мне выполнить перечисление() по списку кортежей в Python?
Вопрос
У меня есть такой код:
letters = [('a', 'A'), ('b', 'B')]
i = 0
for (lowercase, uppercase) in letters:
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
i += 1
Мне сказали, что есть функция enumerate(), которая может позаботиться о переменной «i» за меня:
for i, l in enumerate(['a', 'b', 'c']):
print "%d: %s" % (i, l)
Однако я не могу понять, как объединить эти два понятия:Как использовать enumerate, если рассматриваемый список состоит из кортежей?Должен ли я это сделать?
letters = [('a', 'A'), ('b', 'B')]
for i, tuple in enumerate(letters):
(lowercase, uppercase) = tuple
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
Или есть более элегантный способ?
Решение
Это аккуратный способ сделать это:
letters = [('a', 'A'), ('b', 'B')]
for i, (lowercase, uppercase) in enumerate(letters):
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
Другие советы
Вот как бы я это сделал:
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)
РЕДАКТИРОВАТЬ:распаковка становится лишней.Это более компактный способ, который может работать или нет в зависимости от вашего варианта использования:
import itertools
letters = [('a', 'A'), ('b', 'B')]
for i in zip(itertools.count(),*zip(*letters)):
print "Letter #%d is %s/%s" % i
Вы тоже можете сделать так:
letters = [('a', 'A'), ('b', 'B')]
for i, letter in enumerate(letters):
print "Letter #%d is %s/%s" % (i, letter[0], letter[1])
Не связан с StackOverflow