我想确定一个列表是否包含某个字符串,所以我使用了一个生成器表达式,如下所示:
g = (s for s in myList if s == myString)
any(g)
当然我想内联这个,所以我这样做:
any((s for s in myList if s == myString))
然后我觉得单个parens会更好看,所以我试试:
any(s for s in myList if s == myString)
并不是真的期待它的运作。惊喜!它确实!
这是合法的Python还是我的实现允许的东西?如果它是合法的,这里的一般规则是什么?
答案 0 :(得分:14)
这是合法的,一般规则是你需要在生成器表达式周围使用括号。作为一个特殊的例外,函数调用的括号也会计数(对于只有一个参数的函数)。 (Documentation)
请注意,my_string
中出现my_list
时的测试就像
my_string in my_list
不需要生成器表达式或调用any()
!
答案 1 :(得分:3)
这是“合法的”,并得到明确支持。一般规则是“((x))
始终与(x)
相同”(即使(x)
当然并不总是与x
相同),并且它应用于生成器表达式为方便起见。