2015-07-25 10 views
0

Я уже знаю, что если у нас есть список из двух кортежей, как:Как объединить два списка питон

list = (('2', '23', '29', '26'), ('36', '0')) 

нижестоящей команда:

new_list = list[0] + list[1] 

было бы;

list = ('2', '23', '29', '26', '36', '0') 

Что мне делать, если у нас есть множество кортежей, приведенные ниже, и я хочу использовать что-то вроде команды петли?

list = [[list], [list2], [list3], ...] 

Я хочу:

new_list = [list1, list2, list3,...] 
+5

Это не списки, они являются кортежами. –

+0

Поиск «плоской карты» - это даст результаты, похожие на http://stackoverflow.com/questions/952914/making-a-flat-list-out-of-list-of-lists-in-python (отметив, что реальные списки используются здесь) – user2864740

+0

Возможный дубликат [Как объединить несколько списков в один список в python?] (http://stackoverflow.com/questions/11574195/how-to-merge-multiple-lists-into-one-list -in-python) – innoSPG

ответ

2

Использование itertools.chain, и вы можете просто задать список в качестве аргументов с помощью * расширить их.

>>> from itertools import chain 
>>> a_list = [[1], [2], [3]] 
>>> list(chain(*a_list)) 
[1, 2, 3] 
>>> tuple(chain(*a_list)) 
(1, 2, 3) 

Также не следует использовать предопределенные типы, такие как list в качестве имени переменной, поскольку это переопределяет их не является то, что они на самом деле, и скобки (1, 2...) результатов синтаксиса в tuple, а не list.

0

Использование sum(),

>>> tp = (('2', '23', '29', '26'), ('36', '0'), ('4', '2')) 
>>> newtp = sum(tp,()) 
>>> newtp 
('2', '23', '29', '26', '36', '0', '4', '2') 

или itertools,

>>> from itertools import chain 
>>> tp = (('2', '23', '29', '26'), ('36', '0'), ('4', '2')) 
>>> newtp = tuple(chain(*tp)) 
>>> newtp 
('2', '23', '29', '26', '36', '0', '4', '2') 

или понимание,

>>> tp = (('2', '23', '29', '26'), ('36', '0'), ('4', '2')) 
>>> newtp = tuple(i for subtp in tp for i in subtp) 
>>> newtp 
('2', '23', '29', '26', '36', '0', '4', '2') 
1
>>> main_list = [[1,2,3],[4,5,6,7],[8,9]] 
>>> [item for sublist in main_list for item in sublist] 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 

Это использует вложенный список compreh ension подход. Хорошее объяснение того, как их читать, можно найти here.

Подумайте, как бы вы сделали это с помощью обычных циклов. Один внешний цикл будет извлекать список, а внутренний цикл добавит каждый элемент списка к результату.

>>> newlist = [] 
>>> for sublist in main_list: 
     for item in sublist: 
      newlist.append(item) 

>>> newlist 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 

Аналогично, в вложенный список понимание выше - for sublist in main_list извлекает подсписок, то for item in sublist петли над каждым элементом и item в начале понимания делает автоматический list.append(item) к конечному результату. Самое большое отличие от обычных циклов заключается в том, что то, что вы хотите автоматически добавить к окончательному результату, расположено в начале.

1

Во-первых, вы не объединяете два списка, как вы говорите в вопросе. Что вы делаете, сделайте список в список .

Существует много способов сделать это.Помимо способов, перечисленных в других ответах, один из возможных решений может быть:

for i in range(0, len(list_of_list)): 
    item = list_of_list[i] 
    for j in range(0,len(item)): 
     new_list = new_list + [item] 

Примечание: Это решение, как правило, помечены как C - как, поскольку он не использует никаких методов Python.

0

Один простой способ используется reduce встроенный способ.

>>> list_vals = (('2', '23', '29', '26'), ('36', '0')) 
>>> reduce(lambda x, y: x + y, list_vals) 
('2', '23', '29', '26', '36', '0') 
Смежные вопросы