2016-04-18 11 views
1

Скажем, у меня есть:Как объединить два списка в список списка на python?

a = [10,14,16]

b = [0,1,2]

и я хочу объединить a и b в один список, как показано ниже:

print c 
[[10, 0], [14, 1], [16, 2]] 

Я попытался слить два списки:

a + b 
[10, 14, 16, 0, 1, 2] 

но это не то же самое, что я хочу достичь. Как я могу это сделать в Python?

+0

Возможный дубликат [Как добавить список к второму списку (конкатенации списков)] (http://stackoverflow.com/questions/1720421/how-to-append-list-to-second-list- concate nate-lists) – Rick

ответ

5

Это то, что zip() для:

>>> a = [10,14,16] 
>>> b = [0,1,2] 
>>> zip(a, b) 
[(10, 0), (14, 1), (16, 2)] 

Обратите внимание, что это было бы получить вам список кортежей. В случае, если вы хотите получить список списков:

>>> [list(item) for item in zip(a, b)] 
[[10, 0], [14, 1], [16, 2]] 
0

с использованием простой петли?

a = [10,14,16] 
b = [0,1,2] 
c = [] 
for i in range(len(a)): 
    try: 
     c.append([a[i],b[i]]) 
    except KeyError: 
     c.append([a[i]]) 
print c 

или с помощью генератора:

c = [ [a[i],b[i]] for i in range(len(a))] 
2
a = [10,14,16] 
b = [0,1,2] 
c = [] 
for i in range(len(a)): 
    c.append([a[i], b[i]]) 
print c 

Или в одной строке:

print [[a[i], b[i]] for i in range(len(a))] 

Выходы:

[[10, 0], [14, 1], [16, 2]] 
4

Вы можете использовать zip встроенный функция. Это очень эффективно по сравнению с ручной реализацией.

In [52]: c = list(zip(a,b)) 

In [53]: c 
Out[53]: [(10, 0), (14, 1), (16, 2)] 
0
import numpy as np 
np.array(a+b).reshape(2,3).T.tolist() 
+0

Думаете, вы имели в виду 'numpy': D –

+0

спасибо @ Farhan.K, опечатка исправлена. – PhilChang

0

для небольших списков вы можете сделать «для» цикла:

a = [10,14,16] 
b = [0,1,2] 
for i in range(len(a)): 
    out[i] = [a[i],b[i]] 

Или для более длинного списка вы можете использовать панда, чтобы создать dataframe :

import pandas as pd 
df = pd.dataframe([a,b],columns = ['a','b']) 
out = df.T.values.tolist() 
Смежные вопросы