Skip to main content
 首页 » 编程设计

python之从列表列表中删除所有匹配值

2025年05月04日16mfryf

我有以下列表对象列表

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] 

我想从此列表中删除所有零。

我关注了这个question并编码如下。

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

请您参考如下方法:

您忘记使用 list 转换内部 filter 函数,当您这样做时,代码会按预期工作:)

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