python转置除第一列之外的列表列表

时间:2017-04-11 20:21:27

标签: python list transpose

我们可以使用

转换列表清单
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]]

2 个答案:

答案 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]]

首先,这将构建lit)子列表上的迭代器列表。

[next(x) for x in it]使it中的每个迭代器前进,并将结果(列表的第一个元素)收集到一个列表中,然后zipit与来自{{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])