2014-12-13 3 views
3

Учитывая следующий список кортежей:Как придавить список кортежей в питоновский список

INPUT = [(1,2),(1,),(1,2,3)] 

Как бы я расплющить его в список?

OUTPUT ==> [1,2,1,1,2,3] 

Есть ли один вкладыш, чтобы сделать это?

Похожие: Flatten list of Tuples in Python

+0

Возможный дубликат [Сглаживание мелкого списка в Python] (http://stackoverflow.com/questions/406121/flattening-a-shallow-list-in-python) – Stuart

+2

Сглаживание списка кортежей можно выполнить точно те же способы сглаживания списка списков. См. Http://stackoverflow.com/questions/406121/flattening-a-shallow-list-in-python, http://stackoverflow.com/questions/952914/making-a-flat-list-out-of-list -of-lists-in-python и многие другие ответы. – Stuart

ответ

7

Вы можете использовать list comprehension:

>>> INPUT = [(1,2),(1,),(1,2,3)] 
>>> [y for x in INPUT for y in x] 
[1, 2, 1, 1, 2, 3] 
>>> 

itertools.chain.from_iterable также используется много в тех случаях, как это:

>>> from itertools import chain 
>>> INPUT = [(1,2),(1,),(1,2,3)] 
>>> list(chain.from_iterable(INPUT)) 
[1, 2, 1, 1, 2, 3] 
>>> 

Это не совсем один лайнер хотя ,

0
>>> INPUT = [(1,2),(1,),(1,2,3)] 
>>> import operator as op 
>>> reduce(op.add, map(list, INPUT)) 
[1, 2, 1, 1, 2, 3] 
+0

Это имеет квадратичное поведение (если вы сделаете список в десять раз дольше, он будет в сто раз медленнее), и поэтому это не будет хорошей идеей для длинных списков. – DSM

+0

Согласен, гораздо лучше использовать 'itertools.chain.from_iterable' –

1
>>> INPUT = [(1,2),(1,),(1,2,3)] 
>>> import itertools 
>>> list(itertools.chain.from_iterable(INPUT)) 
[1, 2, 1, 1, 2, 3] 
0

вы можете использовать sum, который добавляет все элементы, если это список из списка (одиночно-гнездового).

sum([(1,2),(1,),(1,2,3)],()) 

или преобразовать в список:

list(sum([(1,2),(1,),(1,2,3)],())) 

Добавление списков работает в питона.

Примечание: Это неэффективно, а некоторые говорят, что они нечитаемы.

0

Не в одной строки, но в два:

>>> out = [] 
>>> map(out.extend, INPUT) 
... [None, None, None] 
>>> print out 
... [1, 2, 1, 1, 2, 3] 

Объявляет объект списка и использовать расширение.

Смежные вопросы