2016-07-06 138 views
0

我有2個列表,我想將它們合併到一個元組列表中,以便維護順序並且result[i](first[i], second[i])。假設這兩個列表將始終具有相同的大小。有沒有辦法使用列表理解來做到這一點?因此,例如:python:將2個有序列表合併到元組列表中

>>> first = [1,2,3] 
>>> second = [4,5,6] 
>>> combine(first, second) 
[(1,4), (2,5), (3,6)] 

我試過幾件事情

[(i,j) for i in first, j in second] 
[(i for i in first, j for j in second)] 
[(i,j) for i,j in first, second] 

這些工作都不是。我只是想知道這是否可能,或者如果我必須使用循環來做。

回答

7

使用ZIP:

list(zip(first, second)) 
Out[384]: [(1, 4), (2, 5), (3, 6)] 
+0

爲什麼'list'包裹呢?我在簡單使用'zip'的時候是否缺少一些邊緣案例? – Spacedman

+2

@Spacedman在Python 3中,zip()返回一個迭代器而不是一個列表。我補充說,它適用於兩個版本。 – ayhan

+0

'zip'肯定有目的,但僅僅是爲了這個問題,是否有可能用列表理解呢? – ewok

2

您可以使用內置的zip功能:

>>> first = [1,2,3] 
>>> second = [4,5,6] 
>>> list(zip(first, second)) 
[(1,4), (2,5), (3,6)] 
6

Python有一個函數:

>>> zip(first, second) 
[(1, 4), (2, 5), (3, 6)] 

zippedy鬥,大新

0

使用izip:

>>> first = [1,2,3] 
>>> second = [4,5,6] 

>>> from itertools import izip 
>>> gen = izip(first, second) 
>>> [(i, j) for i, j in gen] 
[(1, 4), (2, 5), (3, 6)] 
1
>>> first = [1,2,3] 
>>> second = [4,5,6] 
>>> list =zip(first,second) 
>>> list 
[(1, 4), (2, 5), (3, 6)] 

或也爲列表,而不是元組,使用numpy的

>>> lista = [first,second] 
>>> import numpy as np 
>>> np.array(lista) 
array([[1, 2, 3], 
     [4, 5, 6]]) 
>>> np.array(lista)[:,0] 
array([1, 4]) 
>>> np.array(lista)[:,1] 
array([2, 5]) 
>>> np.array(lista)[:,2] 
array([3, 6]) 
相關問題