21

我想确定一个列表是否包含某个字符串,所以我使用生成器表达式,如下所示:

g = (s for s in myList if s == myString)
any(g)

当然我想内联这个,所以我这样做:

any((s for s in myList if s == myString))

然后我认为单括号会更好看,所以我尝试:

any(s for s in myList if s == myString)

并不是真的期望它起作用。惊喜!确实如此!

那么这是合法的 Python 还是我的实现允许的东西?如果合法,这里的一般规则是什么?

4

2 回答 2

22

这是合法的,一般规则是您确实需要在生成器表达式周围加上括号。作为一个特殊的例外,函数调用中的括号也算在内(对于只有一个参数的函数)。(文档

请注意,测试是否出现my_stringmy_list

my_string in my_list

不需要生成器表达式或调用any()

于 2012-02-15T16:57:48.110 回答
3

它是“合法的”,并得到明确支持。一般规则是 "((x))总是与(x)" 相同(尽管当然(x)并不总是相同x),并且它只是为了方便而应用于生成器表达式。

于 2012-02-15T16:58:59.450 回答