Python中列表理解中表达式的引用值?

时间:2013-05-31 03:38:12

标签: python list-comprehension temporary temporaries

如果我有像

这样的列表理解
[mymap.get(x, None) for x in oldlist if mymap.get(x,None)]

有没有办法在{<1}}只一次

我想像

mymap.get(x,None)

但目前这是py 2.x中的[y for x in oldlist if mymap.get(x,None) as y] 。我希望能够引用列表推导的"expression"或者“list_if”部分的结果值。

我也试过

SyntaxError

但那是[_ for x in oldlist if mymap.get(x,None)] ,我猜NameError只是行上的一些翻译功能。

修改

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

或者使用bool

代替等效代码。
filter(bool, (mymap.get(x, None) for x in oldlist))

要回答您的问题,我们无法从output function引用predicate