我有以下列表对象列表
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]]
