当前位置: 首页 > 知识库问答 >
问题:

Python的任何和所有函数是如何工作的?

晏望
2023-03-14

我试图理解any()all()Python内置函数是如何工作的。

print d['Drd2']
# [[1, 5, 0], [1, 6, 0]]
print list(zip(*d['Drd2']))
# [(1, 1), (5, 6), (0, 0)]
print [any(x) and not all(x) for x in zip(*d['Drd2'])]
# [False, False, False]
# [False, True, False]

由于(1,1)相同,(5,6)不同,(0,0)相同。

为什么它对所有元组的计算结果都为False?

共有1个答案

吕晟睿
2023-03-14

您可以大致将anyall分别视为逻辑运算符系列。

任何

any将在至少一个元素为true时返回true。阅读真值测试。

+-----------------------------------------+---------+---------+
|                                         |   any   |   all   |
+-----------------------------------------+---------+---------+
| All Truthy values                       |  True   |  True   |
+-----------------------------------------+---------+---------+
| All Falsy values                        |  False  |  False  |
+-----------------------------------------+---------+---------+
| One Truthy value (all others are Falsy) |  True   |  False  |
+-----------------------------------------+---------+---------+
| One Falsy value (all others are Truthy) |  True   |  False  |
+-----------------------------------------+---------+---------+
| Empty Iterable                          |  False  |  True   |
+-----------------------------------------+---------+---------+

注意1:空的迭代用例在正式文档中解释,如下所示

任意

如果可迭代的任何元素为true,则返回true。如果iterable为空,则返回false

关于anyall要知道的另一件重要的事情是,当他们知道结果时,它会使执行短路。这样做的好处是,整个迭代都不需要消耗。例如,

>>> multiples_of_6 = (not (i % 6) for i in range(1, 10))
>>> any(multiples_of_6)
True
>>> list(multiples_of_6)
[False, False, False]

这里,(not(i%6)for i in range(1,10))是一个生成器表达式,如果1和9内的当前数字是6的倍数,则返回trueany迭代multiples_of_6并且当它满足6时,它找到一个Truthy值,因此它立即返回true,而multiples_of_6的其余部分不被迭代。这就是我们在打印列表(multiples_of_6)时看到的结果,它是789的结果。

这个极好的东西在这个答案中运用得非常巧妙。

有了这个基本的理解,如果我们查看您的代码,您就会

any(x) and not all(x)

这将确保至少有一个值是真实的,但不是所有值都是真实的。这就是它返回[False,False,False]的原因。如果您真的想检查这两个数字是否不相同,

print [x[0] != x[1] for x in zip(*d['Drd2'])]
 类似资料:
  • 问题内容: 试图了解和内置函数的工作方式。 我正在尝试比较元组,以便如果任何值不同,则它将返回,如果它们都相同,则将返回。在这种情况下,他们如何工作以返回[False,False,False]? 是一个。 据我所知,这应该输出 因为相同,不同,并且相同。 为什么对所有元组求值为False? 问题答案: 你可以粗略地认为和作为系列的逻辑和分别运营。 任何 当至少一个元素是 时将返回。阅读有关真值测试

  • 问题内容: 如果我写 然后给出0、1、2、3、4,这 是否意味着Python同时向i分配了0、1、2、3、4? 但是,如果我写了: 然后我叫a,它只给出5, 但是如果我加上“ print a”,它得到1、2、3、4、5。 所以我的问题是,这有什么区别? 是字符串还是列表还是其他? 也许有人可以帮助我进行梳理: 如果运行此类代码,则仅当l = 5时才能得到答案。 如何使它们开始循环? 即l = 0获

  • 问题内容: python split方法内部实际上有什么作用? 问题答案: 原始字符串与Python字符串 的 [R 是 表明 它是一个 原始字符串 。 原始字符串与常规python字符串有何不同? 该 特殊字符失去 其 内部特殊的意义 一个 原始字符串 。例如,python字符串中的换行符将在原始字符串中失去其含义,仅表示反斜杠后跟n。 将中断和拆分传递的参数,并返回列表中的所有部分。该列表将不

  • 问题内容: 我有两种不了解如何在Python中进行导入的特定情况: 第一种具体情况: 当我在两个不同的Python脚本中导入同一模块时,该模块不会被导入两次,对吗?Python第一次遇到它时,将其导入,第二次它是否检查该模块是否已导入,或者是否进行了复制? 第二种具体情况: 考虑以下模块,称为: 然后,我们有个模块,该模块导入: 之后,我们有一个名为的脚本,该脚本由用户执行: 在这里我不知道:返回

  • 我的python版本是3.5通过Anaconda在Windows 10环境。我使用Pyminizip是因为我需要对我的zip文件进行密码保护,而Zipfile还不支持它。 我能够通过函数压缩单个文件,并且加密函数按预期工作。但是,当尝试使用时,我总是遇到Python崩溃(如图片所示),我相信这是由于我的错误输入格式的问题。 我想知道的是:输入参数的可接受格式是什么?来自Pyminizip的文档: