我有两个二维列表,例如:
a = [[1, 2], [3, 4]]
b = [[5, 6], [7, 8]]
那么我怎样才能得到一个二维元组列表:[[(1,5), (2,6)], [(3,7), (4,8)]]?
我看到你已经回答了你自己的问题,如下:
[[(i1,j1) for i1, j1 in zip(i, j)] for i, j in zip(a, b)]
然而,存在一种简化的形式,沿着类似的路线,但直接使用元组而不是将它们解包成多个变量——第一个列表理解也可以通过调用list
的输出来替换zip
:
[list(zip(*t)) for t in zip(a,b)]
或者:
vars = (a, b)
[list(zip(*t)) for t in zip(*vars)]
除了稍微简单一点之外,这还有一个优点,即更容易推广到更多变量,例如,如果您有:
a = [[1, 2], [3, 4]]
b = [[5, 6], [7, 8]]
c = [[9, 10], [11, 12]]
那么你可以这样做:
vars = (a, b, c)
[list(zip(*t)) for t in zip(*vars)]
为你带来:
[[(1, 5, 9), (2, 6, 10)], [(3, 7, 11), (4, 8, 12)]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句