2014-01-16 41 views
0

有沒有辦法將izip_longest()應用於列表中的列表?izip_longest列表中的列表

如果我有

somelist = [[1, 2, 3], "abcd", (4, 5, 6)] 

是有辦法做到

izip_longest(somelist[0], somelist[1], ....) 
+1

使用參數解包:'izip_longest(* list)' –

+0

不要使用'list'作爲變量名,它會掩蓋內置類型。 –

回答

3

可以解開列表,與*,這樣

my_list = [[1, 2, 3], "abcd", (4, 5, 6)] 
izip_longest(*my_list) 

例如,

from itertools import izip_longest 

my_list = [[1, 2, 3], "abcd", (4, 5, 6)] 
print list(izip_longest(*my_list)) 

輸出

[(1, 'a', 4), (2, 'b', 5), (3, 'c', 6), (None, 'd', None)] 

注:使用list作爲變量名稱將陰影內建list功能

如果您選擇使用自定義替代值,而不是None,你可以做這樣的

print list(izip_longest(*my_list, fillvalue = -1)) 

輸出

[(1, 'a', 4), (2, 'b', 5), (3, 'c', 6), (-1, 'd', -1)] 
1

使用*args調用語法:

some_list = [[1, 2, 3], "abcd", (4, 5, 6)] 
izip_longest(*somelist) 

這句法適用的somelist所有元素作爲單獨的參數到被調用的對象。

這適用於所有電話,而不僅僅是izip_longest()

演示:

>>> from itertools import izip_longest 
>>> some_list = [[1, 2, 3], "abcd", (4, 5, 6)] 
>>> list(izip_longest(*some_list)) 
[(1, 'a', 4), (2, 'b', 5), (3, 'c', 6), (None, 'd', None)]