Gab*_*iel 4 python performance list
这是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])
Run Code Online (Sandbox Code Playgroud)
这使得blool像这样:
b = [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]
Run Code Online (Sandbox Code Playgroud)
即,每个列表中的每个第一项都a将存储在第一个列表中,b并且对于列表2和3中的相同b.
我需要将它应用到一个有点大的a列表中,是否有更有效的方法来执行此操作?
Mar*_*ers 14
有一个很多更好的方法来转你的行和列:
b = zip(*a)
Run Code Online (Sandbox Code Playgroud)
演示:
>>> 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)]
Run Code Online (Sandbox Code Playgroud)
zip()将多个序列作为参数,并将每个序列中的元素配对以形成新列表.通过传递a与*图示的说法,我们要求Python来扩展a成独立的参数zip().
请注意,输出为您提供元组列表; 根据需要将元素映射回列表:
b = map(list, zip(*a))
Run Code Online (Sandbox Code Playgroud)