2013-05-31 31 views
0

如果我有一个像Python中列表理解中表达式的参考值?

[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,我想_仅为上线的一些解释功能。

编辑

有没有以某种方式引用该临时/匿名/无名变量的方式,而无需重新遍历列表?

回答

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

这不会重新遍历列表吗? – n611x007

+2

@naxa否,它不会,这就是它的意义所在,它是一个生成器表达式(注意'()'括号而不是'[]') – jamylak

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