这是我需要做的重新安排MWE
:
a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
b = [[], [], []]
for item in a:
b[0].append(item[0])
b[1].append(item[1])
b[2].append(item[2])
使b
lool像这样:
b = [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]
即,a
中每个列表中的每个第一项都将存储在b
的第一个列表中,b
中的第二个和第三个列表中的每个项目都相同。
我需要将它应用到一个有点大的a
列表中,是否有更有效的方法来执行此操作?
答案 0 :(得分:14)
有一个很多更好的方法来转置行和列:
b = zip(*a)
演示:
>>> a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
>>> zip(*a)
[(1, 4, 7, 10), (2, 5, 8, 11), (3, 6, 9, 12)]
zip()
将多个序列作为参数,并将每个序列中的元素配对以形成新列表。通过使用a
splat参数传递*
,我们要求Python将a
扩展为zip()
的单独参数。
请注意,输出会为您提供元组列表;根据需要将元素映射回列表:
b = map(list, zip(*a))