几天前我问了一个关于列表理解的问题:Elegant way to delete items in a list which do not has substrings that appear in another list
无论如何,我对我的问题得到了很好的回答。这是一个列表理解:
[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
部分。它对我来说看起来像一个发电机表达,但我不确定。我认为最好在另一篇文章中提出这个问题。
那么它是生成器表达式还是别的什么?
答案 0 :(得分:3)
让python告诉你它是什么:
>>> p=[]
>>> exclude_list=[]
>>> type(e not in p for e in exclude_list)
<class 'generator'>
答案 1 :(得分:2)
是的,all(e not in p for e in exclude_list)
是一个包含生成器表达式的调用。传递给调用的 only 参数的Generator表达式可以省略括号。在这里,这是被调用的all()
function。
来自Generator expressions reference documentation:
只有一个参数的调用可以省略括号。
all()
函数(以及伴随函数any()
通常被赋予生成器表达式,因为这允许对一系列测试进行惰性求值。只有足够的e not in p
次测试执行以确定结果;如果任何 e not in p
测试为false,all()
会提前返回,并且不会执行进一步的测试。