2012-02-29 5 views
3

У меня есть списки, как:Zip/Карта списки списков в Python

L1 = [list] 

L2 = [ [l1], [l2], ..., [ln] ] 

Мне нужно сопоставить эти списки

L = [ [list+l1] , [list + l2] , ..., [list + ln] ] 

Прямо сейчас я просто повторив L1 N раз, а затем сжать их , Может ли кто-нибудь угодить мне более элегантным способом? Другими словами, я ищу, чтобы сделать это:

L=[] 
L.append(L1 + L2[0]) 
L.append(L1 + L2[1]) 
... 

Было бы хорошо, если решение будет устойчивым к следующим изменением:

L1 = [list1, list2, ..., listk] 

, а затем L становится

[ [list1 + list2 + ... + listk + l1] , ..., [list1 + list2 + ... + listk + ln] ] 

Спасибо!

+3

Непонятно, является ли «L1» обычным списком или списком, содержащим один другой список. Было бы неплохо, если бы вы могли представить реальный код в качестве примеров, чтобы избежать таких неоднозначностей. –

ответ

4
L=[] 
L.append(L1 + L2[0]) 
L.append(L1 + L2[1]) 
... 

эквивалентно

L = [ L1+item for item in L2 ] 

Если L1 = [list1, list2, ..., listk] список списков, таких как

In [43]: L1 = [[1,2],[2,3]] 

затем list1 + list2 + ... + listk могут быть образованы с sum(L1, []):

In [44]: sum(L1,[]) 
Out[44]: [1, 2, 2, 3] 

In [45]: [1,2]+[2,3] 
Out[45]: [1, 2, 2, 3] 

Таким образом, в этом случае вы можете использовать

L1_sum = sum(L1, []) 
L = [ L1_sum+item for item in L2 ] 

(За исключением: Также можно использовать L = [ sum(L1, [])+item for item in L2 ], но это было бы повторить расчет sum(L1, []) один раз для каждого элемента в L2.)

+0

Спасибо. Я поеду с: L = [list1 + list2 ... + listk + item для элемента в L2] – Kevin

2

Использование списка понимание является питоновым способом:

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