如何在不使用lambda,map,filter的情况下编写这些函数?

时间:2017-03-03 11:39:18

标签: python lambda list-comprehension

您好我有两个使用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 变量代表布尔值。

有没有更好的方法来重写它们,这也会提高性能?

谢谢

1 个答案:

答案 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中,mapfilter返回列表,但是Python 3中的生成器。