2015-07-04 143 views
2

我目前正在學習Python中的列表理解。我將如何做到以下幾點:成對追加蟒蛇沒有ZIP

l1 = [2,4,6,8] 
l2 = [2,3,4,5] 
l = [*some list comprehension*] 

使

l = [[2,2],[4,3],[6,4],[8,5]] 

編輯:我能做到這一點沒有拉鍊?

+0

好,使其更簡單你'[I,J]爲I,J拉鍊(L1,L2)]' –

+2

當然,你可以不用'zip',但這是一個非常糟糕的方式來爲範圍(len(l1))]'... [] [[l1 [i],l2 [i]]) –

+0

所以它是一個很好的編程習慣使用zip?還有,列表理解是不是很好的編程習慣? – Nitin

回答

1

您希望zip功能。

示例 -

>>> l1 = [2,4,6,8] 
>>> l2 = [2,3,4,5] 
>>> 
>>> l = list(zip(l1,l2)) 
>>> l 
[(2, 2), (4, 3), (6, 4), (8, 5)] 

如果你想在內部列表以list類型,而不是元組 -

>>> l = [list(x) for x in zip(l1,l2)] 
>>> l 
[[2, 2], [4, 3], [6, 4], [8, 5]] 

在蟒蛇3.x中,zip返回迭代器,所以如果你做不想要列表,但只是想遍歷每個組合(壓縮)的元素,您可以直接使用 - zip(l1,l2)

因爲它是問的問題,做到這一點不zip功能,您可以使用enumerate函數獲取索引以及元素從一個列表,然後使用索引來得到第二個列表中的元素。

>>> l = [[x,l2[i]] for i,x in enumerate(l1)] 
>>> l 
[[2, 2], [4, 3], [6, 4], [8, 5]] 

但是,這是行不通的,除非兩個列表具有相同的size.Also不知道你爲什麼會想這樣做沒有拉鍊。

0

使用列表理解和zip

>>> l1 = [2, 4, 6, 8] 
>>> l2 = [2, 3, 4, 5] 
>>> [[x, y] for x, y in zip(l1, l2)] 
[[2, 2], [4, 3], [6, 4], [8, 5]] 
0

您可以使用zip作爲

>>> l1 = [2,4,6,8] 
>>> l2 = [2,3,4,5] 
>>> zip(l1,l2) 
[(2, 2), (4, 3), (6, 4), (8, 5)] 
>>> [ list(x) for x in zip(l1,l2) ] 
[[2, 2], [4, 3], [6, 4], [8, 5]]