1

如果我有一个列表理解,比如

[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]

但目前这是SyntaxErrorpy 2.x中的一个。我希望能够引用列表理解的“表达式”或它的“list_if”部分的结果值。

我也试过

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

但那是一个NameError,我想_这只是在线上的一些解释器功能。

编辑

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

4

2 回答 2

5
[y for y in (mymap.get(x, None) for x in oldlist) if y]
于 2013-05-31T03:39:49.780 回答
2
filter(None, (mymap.get(x, None) for x in oldlist))

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

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

为了回答你的问题,没有办法从predicate引用输出函数

于 2013-05-31T03:39:15.930 回答