【问题标题】:Reference value of expression inside list comprehension in Python?Python中列表理解中表达式的参考值?
【发布时间】:2013-05-31 03:38:11
【问题描述】:

如果我有类似的列表理解

[mymap.get(x, None) for x in oldlist if mymap.get(x,None)]

有没有办法让mymap.get(x,None) 在这里只一次

我想像

[y for x in oldlist if mymap.get(x,None) as y]

但目前这是 py 2.x 中的 SyntaxError。我希望能够引用列表理解的"expression" 或其中的“list_if”部分的结果值。

我也试过

[_ for x in oldlist if mymap.get(x,None)]

但那是 NameError,我猜 _ 只是行上的一些解释器功能。

编辑

有没有办法以某种方式引用这个临时/匿名/未命名的变量,而无需重新迭代列表?

【问题讨论】:

    标签: python list-comprehension temporary temporaries


    【解决方案1】:
    [y for y in (mymap.get(x, None) for x in oldlist) if y]
    

    【讨论】:

    • 这不会重新遍历列表吗?
    • @naxa 不,它不会,这就是它的重点,它是一个生成器表达式(注意() 括号而不是[]
    【解决方案2】:
    filter(None, (mymap.get(x, None) for x in oldlist))
    

    或者如果它适合您的喜好,等效代码使用bool代替

    filter(bool, (mymap.get(x, None) for x in oldlist))
    

    为了回答您的问题,无法从predicate 引用output function

    【讨论】:

      猜你喜欢
      • 2011-08-20
      • 2014-10-02
      • 2016-01-15
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      相关资源
      最近更新 更多