给出该值:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
是否可以使用列表推导来产生此值:
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
?
如果可能的话,我宁愿不使用zip来做。
谢谢!
编辑:我不想使用zip的原因是我以前使用zip做过类似的事情(尽管不是列表列表),建议我尝试使用列表理解,这样可以使它更整洁。我认为相同的原理可能在这里适用,但也许不适用,因为这是一个列表列表,而不仅仅是像上一个问题那样的单个列表。
此外,我在发布此问题之前所做的尝试甚至不值得分享。基本上,这是一个列表理解功能,它创建了一个列表,但我不知道如何用它创建列表列表。也许这并不像我希望的那么简单。毕竟我可能会带拉链。
答案 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)))
的方法