首页 > 解决方案 > 从列表列表中删除所有匹配值

问题描述

我有以下列表对象列表

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>,

标签: pythonlist

解决方案


You forgot to cast the inner filter function with a list, when you do that, the code works as expected :)

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)

The output will be

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

Also a simpler way of understanding will be to use a list-comprehension

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)

The output will be

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

推荐阅读