pythonic способ взорвать список кортежей

Я должен сделать противоположность этого

Несколько кортеж к кортежу комнаты (квартиры) в третьем этаже в 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))

но я хотел бы видеть что-то более необычное.

6
задан Community 23 May 2017 в 12:30
поделиться

3 ответа

Самый эффективный способ сделать это:

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 быстрее для небольших списков, но производительность значительно снижается с большими списками.

20
ответ дан 8 December 2019 в 03:39
поделиться
>>> import itertools
>>> tp = [(1,2),(3,4),(5,6)]
>>> lst = list(itertools.chain(*tp))
>>> lst
[1, 2, 3, 4, 5, 6]

Конечно, если вам нужен не список, а итератор, вы можете отбросить list () вызов преобразования.

6
ответ дан 8 December 2019 в 03:39
поделиться
l = [(1,2), (3,4), (5,6)]
reduce (lambda x,y: x+list(y), l, [])
2
ответ дан 8 December 2019 в 03:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: