Python- "in"和 "in x for x in"有什么区别

标签 python data-structures containers generator membership

这是我的 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/

相关文章:

python - 无属性 : 'audit' found while using smtplib to send emails

python - matplotlib:更改单个体素面颜色

c# - 用数组模拟 4 个象限

docker - list 列表在Docker容器中的用途是什么?

来自现有 Rails/Unicorn/MySQL 应用程序的 Docker 镜像

azure - 在 Azure DevOps Pipeline "partially"中并行运行两个阶段

Python Webkit 使用虚拟帧缓冲区制作网站截图

Python使用卡尔曼滤波器来改进模拟但结果更差

sql - 对于 char/varchar/text 列,为什么该列的索引可以加快搜索速度?

swift - Swift中的链表声明,手指类型可以透明地插入中间或开始