所以我的意图是用 map、filter 和 lambda 迭代列表中的列表 例如:
[ [33,3,3,0] , [34,1,0,4] ] should result in [ [33,3,3] , [34,1,4] ]
def no_zeros(lst):
a=map(filter(lambda x:(y==0 for y in x) ,lst),lst)
print (list(a))
#(says that filter is not callable)
我知道这段代码行不通,但我不知道我到底做错了什么,因为我对 lambda 还是个新手,等等。我已经尝试过不同的东西,比如在 lambda 之后移动过滤器,但是那似乎也不起作用。我很感激任何类型的提示或帮助。
最佳答案
map
将第一个参数中的函数应用于第二个参数。它会尝试调用您的 filter
对象...
固定版本是:
list(map(lambda z: list(filter(None,z)),lst))
(即使它产生了预期的结果仍然不是很清楚......我花了 3 或 4 次尝试通过试验和错误来获得正确的结果,并且 filter
& map
需要在 Python 3 中迭代,这无济于事,而且会扼杀关于那些时髦关键字的整个炒作)
在 lambda/map/filter
复杂性的这一点上,您最好使用列表理解:
lst = [ [33,3,3,0] , [34,1,0,4] ]
result = [ [x for x in sl if x] for sl in lst]
print(result)
结果:
[[33, 3, 3], [34, 1, 4]]
关于Python 使用 map() 遍历列表中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47714423/