2016-08-29 2 views
0

Мне нужно сделать что-то очень похожее на то, что было задано здесь How would you zip an unknown number of lists in Python?, но в более общем случае.zip неизвестное количество списков с Python для нескольких списков

У меня есть следующие настройки:

a = [['a', '0', 'b', 'f', '78']] 
b = [['3', 'w', 'hh', '12', '8']] 
c = [['g', '7', '1', 'a0', '9'], ['45', '4', 'fe', 'h', 'k']] 

мне нужно сжать эти списки вместе, чтобы получить:

abc = [['a', '3', 'g', '45'], ['0', 'w', '7', '4'], ['b', 'hh', '1', 'fe'], ['f', '12', 'a0', 'h'], ['78', '8', '9', 'k']] 

, которые я могу генерировать с:

zip(a[0], b[0], c[0], c[1]) 

Но в списках a,b,c содержится ряд подписок, которые будут варьироваться для последовательных прогонов, поэтому этот «человек ual "способ их расширения не будет работать.

Ближайший я могу получить это:

zip(a[0], b[0], *c) 

Поскольку распаковке список с * в любом другом положении, чем последний не допускается, «идеального» выражение:

zip(*a, *b, *c) 

не Работа.

Как можно объединить несколько списков с неизвестным количеством подписок?

ответ

5

itertools.chain на помощь:

import itertools 

z = list(zip(*itertools.chain(a, b, c))) 
+1

Спасибо Израиль! Мне нужно чаще использовать 'itertools'. – Gabriel

+0

Добро пожаловать. В самом деле, itertools содержит некоторые полезные функции, такие как 'groupby',' product', 'permutations',' combination' и многое другое. Отличный модуль, основанный на генераторах. –

Смежные вопросы