如何在python中的另一个列表的空列表中添加新列

时间:2018-02-09 13:46:36

标签: python list

我有一个清单

L=[[1, 2, 3, 0, 3, 8], [4, 5, 6, 0, 3, 8], [7, 8, 9, 0, 3, 8]]

另一个清单

col=[0,2,3]

和一个空列表M = []

col列表包含L列的列索引,必须将其复制到M

因此M应为[[1,3,0],[4,6,0],[7,9,0]]

我怎么能这样做? 我希望M作为数据框。

4 个答案:

答案 0 :(得分:6)

>>> L=[[1, 2, 3, 0, 3, 8], [4, 5, 6, 0, 3, 8], [7, 8, 9, 0, 3, 8]]
>>> col=[0,2,3]
>>> M = [[nums[i] for i in col] for nums in L]
>>> M
[[1, 3, 0], [4, 6, 0], [7, 9, 0]]

答案 1 :(得分:2)

使用numpy,您可以使用列表作为列表索引:

>>> import numpy as np
>>> L=np.array([[1, 2, 3, 0, 3, 8], [4, 5, 6, 0, 3, 8], [7, 8, 9, 0, 3, 8]])
>>> col=[0,2,3]
>>> M = [row[col] for row in L]
>>> M
[array([1, 3, 0]), array([4, 6, 0]), array([7, 9, 0])]
>>> M = [list(row[col]) for row in L]
>>> M
[[1, 3, 0], [4, 6, 0], [7, 9, 0]]

答案 2 :(得分:1)

您可以使用operator.itemgetter以及简单的列表理解来获取所需的元素

>>> from operator import itemgetter
>>> L = [[1, 2, 3, 0, 3, 8], [4, 5, 6, 0, 3, 8], [7, 8, 9, 0, 3, 8]]
>>> col = col=[0,2,3]
>>> M = [list(itemgetter(*col)(i)) for i in l]
>>> M
[[1, 3, 0], [4, 6, 0], [7, 9, 0]]

要将其转换为DataFrame,您可以

>>> import pandas as pd
>>> df = pd.DataFrame(M)
>>> df
   0  1  2
0  1  3  0
1  4  6  0
2  7  9  0

答案 3 :(得分:0)

只是把它放在那里,enumerate解决方案:

L=[[1, 2, 3, 0, 3, 8], [4, 5, 6, 0, 3, 8], [7, 8, 9, 0, 3, 8]]
col=[0,2,3]

solution = [[j for i, j in enumerate(sub) if i in col] for sub in L]
#[[1, 3, 0], [4, 6, 0], [7, 9, 0]]

如果colset

,这会更快
col={0,2,3}