2

几天前我问了一个关于列表理解的问题:删除列表中没有出现在另一个列表中的子字符串的项目的优雅方法

无论如何,我的问题得到了很好的答案。这是一个列表理解:

[p for p in process_list if all(e not in p for e in exclude_list)]

我明白了这个想法并将其应用到我的工作中。但我不确定我是否得到了e not in p for e in exclude_list正确的部分。对我来说,它看起来像是一个生成器表达式,但我不确定。我认为最好在另一篇文章中提出这个问题。

那么它是生成器表达式还是其他什么?

4

2 回答 2

2

是的,all(e not in p for e in exclude_list)是一个包含生成器表达式的调用。作为传递给调用的唯一参数的生成器表达式可以省略括号。在这里,这就是被调用的all()函数。

生成器表达式参考文档

只有一个参数的调用可以省略括号。

all()函数(以及伴随函数any())通常被赋予一个生成器表达式,因为这允许对一系列测试进行惰性评估。只e not in p执行足够的测试来确定结果;如果有任何 e not in p测试为假,则all()提前返回并不执行进一步的测试。

于 2016-11-29T20:08:21.043 回答
2

让python告诉你它是什么:

>>> p=[]
>>> exclude_list=[]
>>> type(e not in p for e in exclude_list)
<class 'generator'>
于 2016-11-29T20:22:45.777 回答