2016-07-06 282 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]) 
相关问题