2015-09-22 47 views
1

這是我試圖乾淨地做的。我有列表下面的列表python使用zip來處理列表清單

lst1 = [[1,2,3],[4,5,6],[7,8,9]] 

現在,我要生成以下列表

lst2 = [[1,4,7],[2,5,8],[3,6,9]] 

現在我知道我可以接近LST2如下

lst2 = zip[lst1[0],lst1[1],lst1[2]] 

lst2 = [(1, 4, 7), (2, 5, 8), (3, 6, 9)] 

,然後用for循環生成我的新列表。

當原始列表的大小未知時,是否有方法生成新列表?

lst1 = [[0],[1], ... [n]] 

lst2 = [[0],[2], ... [n]] 

我花了太多時間研究並試圖找出這個問題。這個過程真的不需要,因爲我只使用3個列表的列表。 (Exp。1st1)。我的好奇心越來越好。希望有人有解決辦法,因爲此時我已經碰到了一堵磚牆。

回答

1

所有你需要的是:

lst1 = [[1,2,3],[4,5,6],[7,8,9]] 
print zip(*lst1) 

,並提供:

[(1, 4, 7), (2, 5, 8), (3, 6, 9)] 

通過添加*,它告訴Python來解壓縮列表作爲單獨的函數的自變量。見Unpacking Argument Lists

1

如果你想列出的清單(而不是一個元組列表),那麼你可以使用列表理解與拉鍊()內置:

>>> l = [[1,2,3],[4,5,6],[7,8,9]] 
>>> [list(x) for x in zip(*l)] 
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]