2011-04-13 28 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)] 
>>> 

上面例子的缺點是我們不總是迭代列表的最小長度。