Копировать и фильтровать вложенный список Python - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть список списков, который выглядит примерно так:

[[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]]

Я попытался np.delete(the_nested[i],0), используя цикл for, и он выдал ошибку " не удалось передать входной массив "

У меня естьтакже пытался удалить его вручную, используя del и pop, но, как и ожидалось, numpy не разрешил его, так как static.

Может ли кто-нибудь предложить альтернативное решение?

Обновление: введите для the_nested numpy.ndarray

Примечание. Заранее извините, если этот пост окажется дубликатом (надеюсь, что нет!): (

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Я вижу, что у вас есть список, и если вы не хотите использовать дополнительные пакеты, такие как 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]] 
0 голосов
/ 04 декабря 2018

Я думаю, вы можете просто проиндексировать его:

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]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...