【问题标题】:How can I alternatively write these functions without using lambda, map, filter?我怎样才能在不使用 lambda、map、filter 的情况下编写这些函数?
【发布时间】:2017-03-03 11:39:18
【问题描述】:

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

有没有更好的方法来重写它们也可以提高性能?

谢谢

【问题讨论】:

  • 您可以改用list comprehensions。但我认为这在性能方面不会有太大变化。
  • 你还没告诉我们y是什么?
  • 你应该解释每个表达式应该做什么。 G.vertex[x][y] 中甚至存储了什么?它是一个布尔值,一个整数,一个字符串???
  • “y”变量代表布尔值。

标签: python lambda list-comprehension


【解决方案1】:

您可以使用生成器表达式和列表推导:

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 中返回生成器。

【讨论】:

    猜你喜欢
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2021-02-28
    相关资源
    最近更新 更多