2011-04-13 26 views
7

有一条巨蟒内置的是不一样的tupler一组列表,或类似的东西:有没有一个python内建从多个列表创建元组?

def tupler(arg1, *args): 
    length = min([len(arg1)]+[len(x) for x in args]) 
    out = [] 
    for i in range(length): 
     out.append(tuple([x[i] for x in [arg1]+args])) 
    return out 

如此,例如:

tupler([1,2,3,4],[5,6,7]) 

回报:

[(1,5),(2,6),(3,7)] 

或者也许有这样做pythony正确的方式,或者是否有一个类似的发生器?

+2

另请参阅itertools模块。 itertools.izip()和itertools.izip_longest()返回高效的迭代器,实现与zip相同的结果。 – sateesh 2011-04-13 12:29:56

回答

15

我认为你正在寻找zip()

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

--->[(1,5),(2,6),(3,7)] 


args = [(1,5),(2,6),(3,7)] 

zip(*args) 

--->[1,2,3],[5,6,7] 
0

正确的方法是使用zip功能。

另外我们可以使用列表解析和内置的enumerate函数
来实现相同的结果。

>>> L1 = [1,2,3,4] 
>>> L2 = [5,6,7] 
>>> [(value, L2[i]) for i, value in enumerate(L1) if i < len(L2)] 
[(1, 5), (2, 6), (3, 7)] 
>>> 

上面例子的缺点是我们不总是迭代列表的最小长度。