python使用zip来处理列表列表

时间:2015-09-22 16:58:27

标签: python list

这就是我想干净利落的事情。我有以下列表清单

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.lst1)。我的好奇心让我变得更好。希望有人有解决方案,因为此时我已经碰到了一堵砖墙。

2 个答案:

答案 0 :(得分: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 :(得分:1)

如果你想要一个列表列表(而不是一个元组列表),那么你可以使用内置zip()的列表理解:

>>> 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]]