python any语句_python使用any()和all()检查列表是否包含一组值或

一般来说:

all和any是接受某些iterable并返回True的函数,如果在all()的情况下,iterable中没有任何值是错误的

在any()的情况下,至少有一个值是真的。

值x是falsy iff bool(x) == False。

值x是真实的iff bool(x) == True。

iterable中的任何非boolean都将很好-bool(x)将根据以下规则强制任何x:0,0.0,None,[],(),[],set(),其他空集合将产生False,任何其他True。bool的docstring使用术语'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):

它首先构造一个iterable,为foobars中的每个项生成一个布尔序列,然后将该项与big_foobar进行比较,并将得到的布尔值发送到结果序列中:tmp = (x == big_foobar for x in foobars)

然后any遍历tmp中的所有项,并在找到第一个truthy元素时返回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 in xs,但后者可读性更强,编写速度更快,运行速度更快。

一些示例:In [1]: any(x > 5 for x in range(4))

Out[1]: False

In [2]: all(isinstance(x, int) for x in range(10))

Out[2]: True

In [3]: any(x == 'Erik' for x in ['Erik', 'John', 'Jane', 'Jim'])

Out[3]: True

In [4]: all([True, True, True, False, True])

Out[4]: False

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值