我可以使用列表推导来创建列表列表吗?

时间:2020-03-06 04:18:50

标签: python list list-comprehension

给出该值:

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

是否可以使用列表推导来产生此值:

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

如果可能的话,我宁愿不使用zip来做。

谢谢!

编辑:我不想使用zip的原因是我以前使用zip做过类似的事情(尽管不是列表列表),建议我尝试使用列表理解,这样可以使它更整洁。我认为相同的原理可能在这里适用,但也许不适用,因为这是一个列表列表,而不仅仅是像上一个问题那样的单个列表。

此外,我在发布此问题之前所做的尝试甚至不值得分享。基本上,这是一个列表理解功能,它创建了一个列表,但我不知道如何用它创建列表列表。也许这并不像我希望的那么简单。毕竟我可能会带拉链。

4 个答案:

答案 0 :(得分:4)

尝试一下:

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

使用zip可以将内部列表中的值汇总在一起,使用*可以解压缩这些值

[*zip(*list1)]

list(map(list,zip(*list1)))

答案 1 :(得分:3)

没有zip

>>> [*map(lambda *a: [*a], *a)]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

答案 2 :(得分:0)

不带拉链:

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
output = [[a[0][i],a[1][i],1[2][i]] for i in range(0,len(a))]

答案 3 :(得分:-1)

怎么样?

original = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
result = []
for x in range(len(min(orig))):
    result.append([item[x] for item in orig])

根据我的测试,它的工作方式类似于@Himanshu的[*zip(*list1)]list(map(list,zip(*list1)))的方法