我们可以使用
转换列表清单map(list, zip(*l))
除了内部列表的第一个元素外,我们可以在上面的命令中改变一些东西来转置下面的列表列表吗?
l = [["item1",1,2,3],["item2",4,5,6],["item3",7,8,9]]
我正在寻找的结果是
r = [["item1",1,4,7],["item2",2,5,8],["item3",3,6,9]]
答案 0 :(得分:3)
替代解决方案:
In [2]: it = [iter(x) for x in l]
In [3]: [list(x) for x in zip([next(x) for x in it], *it)]
Out[3]: [['item1', 1, 4, 7], ['item2', 2, 5, 8], ['item3', 3, 6, 9]]
首先,这将构建l
(it
)子列表上的迭代器列表。
[next(x) for x in it]
使it
中的每个迭代器前进,并将结果(列表的第一个元素)收集到一个列表中,然后zip
将it
与来自{{1}的先前递增的迭代器一起收集}。
答案 1 :(得分:0)
如果你想要使用熊猫,有更简单的方法......
headers = [item[0] for item in l]
data = [item[1:] for item in l]
r = map(list, zip(*data))
for i, item in enumerate(r):
item.insert(0, headers[i])