这是我的 Python 代码:
# 1)
if (x not in z for z in y):
# 2)
if (x not in y):
其中 y 可以是如下列表:
y = ['1','2','3']
谁能解释一下这两个句子的区别? 谢谢!
最佳答案
生成器
首先,(x not in z for z in y)
是一个生成器语句,如果 if
在它前面,它总是返回 True .
if (x not in z for z in y): # Always returns True
这可用于查看是否有任何或所有嵌套迭代器包含 x
。
例如
if any(x in z for z in y): # Returns True if any of the z's contain x
if all(x in z for z in y): # Returns True only if all of the z's contain x
所以如果 y
是这样的:
y = ['hello','how','are','you']
然后如果 x
是,例如 'e'
,那么上面的 any
理解将返回 True
,但是 all
理解将返回 False
。
有条件的
所以这就是生成器理解内部发生的事情:如果 y 是一个列表,并且您测试:
(x not in z for z in y)
y 中的 z 必须是可迭代的,以便测试包含哪些字符串,但在这种情况下,您只能看到长度为 1 的字符串中是否有内容。一个更好的例子是使用整数:
y = [1, 2, 3]
和
if (x not in z for z in y):
会失败,因为整数是不可迭代的,但是
if (x not in y):
会成功,因为您可以测试实际列表中的成员资格。
当你有
y = ['1','2','3']
类似的嵌套级别是:
y = [(1,), (2,), (3,)]
与
(x not in z for z in y)
您正在测试 x 是否在这些元组之一中。
这有意义吗?
关于Python- "in"和 "in x for x in"有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22084219/