Удалить все подходящие значения из списка списков - PullRequest
1 голос
/ 12 мая 2019

У меня следующий список объектов списка

myList = [[123,0.0,345,0.0,0.0,0.0],
 [45,0.0,0.0,0.0],
 [67,8,0.0,5,6,7,0.0]

И я хочу удалить все нули из этого списка.

Я следовал за этим вопросом и закодировал его следующим образом.

myList = list(filter(lambda j:j!=0,myList[i]) for i in range(len(myList)))

Но я получаю список объектов фильтра в качестве вывода.В чем ошибка в коде.

[<filter object at 0x7fe7bdfff8d0>, <filter object at 0x7fe7a6eaaf98>, <filter object at 0x7fe7a6f08048>,

Ответы [ 4 ]

7 голосов
/ 12 мая 2019

Вы забыли привести внутреннюю функцию filter к list, когда вы это делаете, код работает как положено:)

myList = [[123,0.0,345,0.0,0.0,0.0],
 [45,0.0,0.0,0.0],
 [67,8,0.0,5,6,7,0.0]]

#Cast inner filter into a list
myList = list(list(filter(lambda j:j!=0,myList[i])) for i in range(len(myList)))
print(myList)

Выход будет

[[123, 345], [45], [67, 8, 5, 6, 7]]

Также более простым способом понимания будет использование списка-понимания

myList = [[123,0.0,345,0.0,0.0,0.0],
 [45,0.0,0.0,0.0],
 [67,8,0.0,5,6,7,0.0]]

#Using list comprehension, in the inner loop check if item is non-zero
myList = [ [item for item in li if item != 0] for li in myList ]
print(myList)

Выход будет

[[123, 345], [45], [67, 8, 5, 6, 7]]
0 голосов
/ 12 мая 2019

Вы также можете сделать это с пониманием списка:

cleaned = [ [e for e in row if e != 0] for row in myList ]
0 голосов
/ 12 мая 2019

Вам просто нужно обернуть фильтр, а не весь оператор:

myList = [list(filter(lambda j:j!=0,myList[i]) for i in range(len(myList))]

Кроме того, вы можете пропустить индекс и выполнить итерации по спискам в myList:

myList = [list(filter(lambda j:j!=0, inner_list) for inner_list in myList]
0 голосов
/ 12 мая 2019

Попробуйте это:

newList = [list(filter(lambda j:j!=0, i)) for i in myList]

ВЫХОД :

[[123, 345], [45], [67, 8, 5, 6, 7]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...