您好我有两个使用lambda,map,filter运算符的函数,我想知道如何以更简单的格式重写它们。
while not all((map(lambda x: G.vertex[x][y], G.vertices())))
v = list((filter(lambda x: not G.vertex[x][y],G.vertices())))
y 变量代表布尔值。
有没有更好的方法来重写它们,这也会提高性能?
谢谢
答案 0 :(得分:0)
您可以使用生成器表达式和列表推导:
while not all(G.vertex[x][y] for x in G.vertices()):
v = [x for x in G.vertices() if not G.vertex[x][y]]
通常,map(f, lst)
等同于 1)至(f(x) for x in lst)
和filter(f, lst)
至(x for x in lst if f(x))
。您还可以将map(g, filter(f, lst))
合并到(g(x) for x in lst if f(x))
。另一方面,filter(f, map(g, lst))
稍微复杂一些,因为您必须首先应用g
。您可以将其写为(y for y in (g(x) for x in lst) if f(y))
或(g(x) for x in lst if f(g(x)))
(但后者必须两次应用g
。
1)请注意,在Python 2中,map
和filter
返回列表,但是Python 3中的生成器。