izip_longest列表中的列表

时间:2014-01-16 14:03:33

标签: python list itertools

有没有办法将izip_longest()应用于列表中的列表?

如果我有

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

有办法吗

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

2 个答案:

答案 0 :(得分: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 :(得分: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)]