复制和过滤嵌套列表Python

时间:2018-12-04 07:35:25

标签: python-3.x numpy

我有一个看起来像这样的列表列表:

[[51502 2 0 ... 0 1 1]
 [8046 2 0 ... 1 1 2]
 ....
 [40701 1 1 ... 1 1 1]]

对于我来说,嵌套列表中的每个第一个元素都是“不适当的”,我想删除所有这些元素。

# My goal: 
[[2 2 0 ... 0 1 1]
 [2 0 ... 1 1 2]
 ....
 [1 1 ... 1 1 1]]

我已经尝试过使用for循环np.delete(the_nested[i],0),但它给我的错误是“ 无法广播输入数组

我还尝试过使用delpop手动删除它,但是正如预期的那样,numpy自静态以来就不允许使用它。

谁能提供替代解决方案?

  

更新:the_nested的类型为numpy.ndarray

注意:如果这篇文章被发现是重复的,我很抱歉(希望不是!):(

2 个答案:

答案 0 :(得分:3)

我认为您可以将其索引出来:

np.array(the_nested)[:,1:]

在您的情况下:

the_nested = [[51502, 2, 0,  0, 1, 1],
              [8046 ,2 ,0 , 1 ,1 ,2],
              [40701, 1 ,1  ,1 ,1 ,1]]

>>> np.array(the_nested)[:,1:]
array([[2, 0, 0, 1, 1],
       [2, 0, 1, 1, 2],
       [1, 1, 1, 1, 1]])

或者,使用np.delete(无需循环):

>>> np.delete(np.array(the_nested),0,axis=1)
array([[2, 0, 0, 1, 1],
       [2, 0, 1, 1, 2],
       [1, 1, 1, 1, 1]])

答案 1 :(得分:1)

我看到您有一个列表,如果您不想使用诸如numpy之类的其他软件包,则可以执行以下操作。但这涉及循环。另外,它不会修改原始列表。

the_nested = [[51502, 2, 0,  0, 1, 1],
              [8046 ,2 ,0 , 1 ,1 ,2],
              [40701, 1 ,1  ,1 ,1 ,1]]

res = []

_ = [res.append(x[1:]) for x in the_nested]

# Output : 
[[2, 0, 0, 1, 1], [2, 0, 1, 1, 2], [1, 1, 1, 1, 1]]