栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用any()和all()检查列表是否包含一组值或另一组值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用any()和all()检查列表是否包含一组值或另一组值

一般来说:

all
并且
any
是需要一些迭代并返回的函数
True
,如果

  • 在的情况下
    all()
    ,迭代器中的任何值都不是虚假的;
  • 在的情况下
    any()
    ,至少一个值是真实的。

x
是假iff
bool(x) == False
。值
x
是正确的iff
bool(x) == True

在迭代将被罚款的任何非布尔值-

bool(x)
将迫使任何
x
根据这些规则:
0
0.0
None
[]
()
[]
set()
,等空的集合将产生
False
,其他任何东西
True
。该docstring
bool
使用术语’true’/’false’表示’truthy’/’falsy’,和
True
/
False
表示具体的布尔值。


在您的特定代码示例中:

您误解了这些功能的工作原理。因此,以下操作完全无法实现您的想法:

if any(foobars) == big_foobar:

…因为

any(foobars)
首先会被评估为
True
False
,然后将该布尔值与进行比较
big_foobar
,所以通常会始终提供给您
False
(除非
big_foobar
碰巧碰巧是相同的布尔值)。

注意: iterable可以是一个列表,但也可以是一个生成器/生成器表达式(≈延迟计算/生成的列表)或任何其他迭代器。

您想要的是:

if any(x == big_foobar for x in foobars):

它基本上首先构造一个可迭代的对象,该对象产生一个布尔序列-
对于中的每个项目

foobars
,它将与进行比较,并将
big_foobar
结果布尔值发送到结果序列中:

tmp = (x == big_foobar for x in foobars)

然后

any
遍历所有项目,
tmp
True
在找到第一个真理元素后立即返回。就像您执行以下操作一样:

In [1]: foobars = ['big', 'small', 'medium', 'nice', 'ugly']In [2]: big_foobar = 'big'In [3]: any(['big' == big_foobar, 'small' == big_foobar, 'medium' == big_foobar, 'nice' == big_foobar, 'ugly' == big_foobar])        Out[3]: True

注意: 正如DSM所指出的,

any(x == y for x in xs)
等同于,
y inxs
但后者更具可读性,编写速度更快,运行速度更快。

一些例子:

In [1]: any(x > 5 for x in range(4))Out[1]: FalseIn [2]: all(isinstance(x, int) for x in range(10))Out[2]: TrueIn [3]: any(x == 'Erik' for x in ['Erik', 'John', 'Jane', 'Jim'])Out[3]: TrueIn [4]: all([True, True, True, False, True])Out[4]: False

另请参阅:http :
//docs.python.org/2/library/functions.html#all



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/624220.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号