Python 使用列表理解交换行和列

Python 使用列表理解交换行和列,python,list-comprehension,Python,List Comprehension,这是我得到的 >>> v = [[x for x in range(4)] for x in range(4)] >>> h = [[x for x in range(4)] for x in range(4)] >>> v [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]] >>> for i in range(len(v[0])): >>>

这是我得到的

>>> v = [[x for x in range(4)] for x in range(4)]
>>> h = [[x for x in range(4)] for x in range(4)]
>>> v
[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
>>> for i in range(len(v[0])):
>>>    for j in range(len(v[0])):
>>>        h[j][i] = v[i][j]
...        
>>> h
[[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]]
如何使用列表理解而不是嵌套for循环生成h

更新:

谢谢你们所有人给我的精彩回答,我很抱歉在我原来的帖子中没有说得更清楚。我应该像这样初始化
v

>>> v = [[randint(0,10) for x in range(4)] for x in range(4)]
例如
v
是:

>>> v
[[5, 1, 0, 5], [8, 9, 9, 10], [3, 7, 1, 1], [6, 6, 10, 7]]
>>> for i in range(len(v[0])):
>>>    for j in range(len(v[0])):
>>>        h[j][i] = v[i][j]
...     
>>> h
[[5, 8, 3, 6], [1, 9, 7, 6], [0, 9, 1, 10], [5, 10, 1, 7]]

您可以
zip
,而不是列表理解:

list(map(list,zip(*v)))

# [[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]]
如果可以拥有元组列表,则可以省略
映射

list(zip(*v))
# [(0, 0, 0, 0), (1, 1, 1, 1), (2, 2, 2, 2), (3, 3, 3, 3)]

如果必须使用列表理解:

[[y for x in range(4)] for y in range(4)]

直截了当地理解:

h = [ v[j][i] for i in range(4) for j in range(4)  ]

如果省略
映射
无需使用
列表