2014-01-16 6 views
0

Есть ли способ применить izip_longest() к спискам внутри списка?izip_longest в списке списков

Если у меня есть

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

есть способ сделать

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

Используйте аргумент unpacking: '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)] 
Смежные вопросы