Я должен сделать противоположность этого
Несколько кортеж к кортежу комнаты (квартиры) в третьем этаже в Python?
А именно, у меня есть список кортежей
[(1,2), (3,4), (5,6)]
и должен произвести это
[1,2,3,4,5,6]
Я лично сделал бы это
>>> tot = []
>>> for i in [(1,2), (3,4), (5,6)]:
... tot.extend(list(i))
но я хотел бы видеть что-то более необычное.
Самый эффективный способ сделать это:
tuples = [(1,2), (3,4), (5,6)]
[item for t in tuples for item in t]
output
[1, 2, 3, 4, 5, 6]
Вот сравнение , которое я сделал для различных способов сделать это в повторяющемся вопросе.
Я знаю, что кто-то собирается предложить это решение
sum(tuples, ())
Но не используйте его, оно создаст новый список промежуточных результатов для каждого шага! если вы не заботитесь о производительности и вам просто нужно компактное решение. Подробнее см. Ответ Алекса
В итоге: sum быстрее для небольших списков, но производительность значительно снижается с большими списками.
>>> import itertools
>>> tp = [(1,2),(3,4),(5,6)]
>>> lst = list(itertools.chain(*tp))
>>> lst
[1, 2, 3, 4, 5, 6]
Конечно, если вам нужен не список, а итератор, вы можете отбросить list ()
вызов преобразования.
l = [(1,2), (3,4), (5,6)]
reduce (lambda x,y: x+list(y), l, [])