Python中的 any() 函数和 all() 函数
作者:pythontip? 发布时间:2023-05-05 08:38:50
回想下,在 Python 中编程时,你是否曾经需要检查某个可迭代对象(如列表)中的任何元素或所有元素的计算结果是否为True
?
假设,我们要判断数字列表a
的所有数字是否都大于0
,此时你估计会这么干:
a = [1, 2, 3, 4]
def is_big_0(l):
# 判断列表l的所有数字是否大于,如果大于0则返回True,否则返回False
for i in l:
if i <= 0:
return False
return True
print(a)
停顿几秒,想一想,假设下次我们要判断其他条件,如每个元素都是偶数或奇数?难道每次都要写一个函数然后for循环遍历吗?
其实python中有两个神奇的函数any()
和all()
,他们可以快速完成上面类似的任务!
接下来,我们将分享 Python 的 any()
和 all()
函数,并使用简单的示例来了解它们的工作原理。
Python 中的布尔数据类型
在学习 any()
和 all()
之前,先快速回顾一下 Python 中的布尔数据类型。你可以在任何 Python 对象上调用 bool()
以获取其真假值。如下代码示例:
# None 的真假值是 False
print(bool(None))
# 输出 False
# 一个空字符串("")的真假值是 False
print(bool(""))
# 输出 False
# 一个空字符串或任何可迭代对象的真假值是 False
print(bool([]))
# 输出 False
# 0 {int (0), float (0.0) 和 complex (0j)} 的真假值是 False
print(bool(0))
# 输出 False
如上面的代码所示,可知:
None
的真假值为False
数字零(
0
)——整数、浮点数和0
的复数表示——都是False
所有空的可迭代对象(如列表、元组和字符串)的真假值为
False
。
也就是说,所有非零值和非空可迭代对象都为True
,这是相当直观的。
请记住:所有非零值和非空可迭代对象都为True
,这是相当直观的!
如何在 Python 中使用 any() 函数
让我们了解 any()
函数的语法,先看一些简单的例子,之后再看更有用的例子。
👉 语法 :any(iterable)
对于迭代中的任何
x
,如果bool(x)
是True
,返回True
如果迭代是空,返回
False
因此,any()
函数将一个可迭代对象作为参数,只要该可迭代对象中至少有一项为 True
,就返回 True
。
下面是一些简单的例子来验证 any()
函数是如何工作的:
list_1 = [0, 0, 0, 1, 0, 0, 0, 0]
# any(a list with at least one non-zero entry) returns True
print(any(list_1))
# Output True
list_2 = [0j, 0, 0, 0.0, 0, 0, 0.0, 0]
# any(a list of zeros) returns False
print(any(list_2))
# Output False
list_3 = [True, False, False]
# any(a list with at least one True value) returns True
print(any(list_3))
# Output True
list_4 = ["", "", "code more"]
# any(a list with at least one non-empty string) returns True
print(any(list_4))
# Output True
list_5 = ["", "", ""]
# any(a list of empty strings) returns False
print(any(list_5))
# Output False
如何用any() 函数检查字符串中的数字
现在让我们使用 any()
函数来检查字符串中是否有任何数字。让我们把步骤写下来:
检查:字符串中是否有任何数字
遍历字符串以访问字符串中的每个字符
通过调用
isdigit()
方法检查每个字符是否是数字如果被测字符是数字,则
isdigit()
返回True
,否则返回False
列表推导式(list comprehension)对于在列表中收集所有这些真假值非常有帮助。这是一个快速回顾:
# 列表推导式
[output_expression for every_item in an_iterable]
|
|
V
result of doing something on each item in the iterable
# 本质上,循环遍历迭代,对每一项进行操作,然后返回操作的结果。
如下面的代码片段所示,我们的示例字符串 coding**is**cool**345
包含数字。
因此,对字符串调用 any()
函数应该返回 True
。我们使用列表推导式来根据字符是否为数字来获取 True
和 False
值的列表。
my_string = "coding**is**cool**345"
# 列表推导
are_there_digits = [char.isdigit() for char in my_string]
# 调用any函数
print(any(are_there_digits))
# 输出 True
请注意 are_there_digits
是一个列表,其项数与字符串的长度一样多。
对于字符串中的每个字符,都有一个对应的真假值——如果字符是数字,则为 True
,如果字符不是数字,则为 False
,如下所示:
my_string = "coding**is**cool**345"
# 列表推导
are_there_digits = [char.isdigit() for char in my_string]
print(are_there_digits)
# Output
# [False, False, False, False, False, False, False, False, False, False, False,
# False, False, False, False, False, False, False, True, True, True]
如何用any()函数检查字符串中的字母
让我们再举一个类似的例子。这一次,让我们检查字符串中的字母。
被测试的字符串***456278)))
是不包含字母的 -- 调用 any()
会按预期返回 False
。对于字符串中的每个字符,调用 isalpha()
方法检查它是否是一个字母。
my_string = "***456278)))"
num = [char.isalpha() for char in my_string]
print(any(num))
# Output False
如何用any()
函数将多个条件与逻辑 OR 组合在一起
假设你有 N 个条件 c1
、c2
、c3
...cN
,考虑下面的伪代码:
if c1 or c2 or ... c_(N-1) or CN:
# DO THIS
pass
else:
# DO THIS
pass
你现在可以将所有这些条件收集在一个可迭代对象中,例如列表或元组,然后对该可迭代对象调用 any()
以检查一个或多个条件是否为 True
,如下所示。是不是很简单? 😀
conditions = [c1, c2, ..., c_N]
if any(conditions):
# DO THIS
pass
else:
# DO THIS
pass
如何使用 all()
函数
让我们从 all()
函数的语法开始:
👉 语法:all(iterable)
如果
bool(x)
对于可迭代对象中的所有值x
为True
,则返回True
。如果可迭代对象为空,则返回
True
。
all()
函数接受一个可迭代对象作为参数,仅当可迭代对象中的所有项的计算结果为 True
,或可迭代对象为空时才返回 True
。在所有其他情况下,all()
函数返回 False
。
如何用all()函数检查字符串中的字母
让我们以类似的例子来检查字符串的某些特征。
测试字符串 coding**is**cool
除了字母之外还包含特殊字符 *
。因此,当我们使用 all()
函数检查字符串中的所有字符是否都是字母时,我们应该得到 False
。
my_string = "coding**is**cool"
are_all_letters = [char.isalpha() for char in my_string]
print(all(are_all_letters))
# Output False
print(are_all_letters)
# Output
# [True, True, True, True, True, True, False, False, True, True, False, False,
# True, True, True, True]
请注意列表 are_all_letters
如何在字符串中出现 *
的所有位置都有 False
值。
如何用all()函数检查字符串中的数字
现在让我们使用 all()
函数检查字符串中的所有字符是否都是数字。测试字符串 56456278
仅包含数字,因此,调用 all()
应该返回 True
,因为列表推导式为我们提供了一个 True
值列表。
my_string = "56456278"
are_all_digits = [char.isdigit() for char in my_string]
print(all(are_all_digits))
# Output True
print(are_all_digits)
# Output [True, True, True, True, True, True, True, True]
如何用Pythonall()
函数用逻辑 AND 组合多个条件
假设你有 N 个条件 c1
、c2
、c3
...cN
,考虑下面的伪代码:
if c1 and c2 and ... c_(N-1) and CN:
# DO THIS
pass
else:
# DO THIS
pass
你可以使用 all()
函数通过收集迭代中的条件,然后在迭代上调用 all()
函数来使这一切变得更加简洁。
conditions = [c1, c2, ..., c_N]
if all(conditions):
# DO THIS
pass
else:
# DO THIS
pass
来源:https://juejin.cn/post/7084830431786303525
猜你喜欢
- 概述运行python脚本时通过命令行方式传入运行参数通常有以下两种自建方式:sys.argv - 简洁argparse - 丰富,可自定义下
- 1.现在我本机系统已内置python2.62.下载进行源码安装复制链接下载到/root/mypackage,解压接着mkdir /usr/l
- 如下所示:# coding=utf-8import osimport cv2videos_src_path = "/home/wg
- 本文介绍了 setuptools 框架的内容,它是 PEAK 的一个副项目,它提供了比 distutils 更加简单的包管理和发行功能。开始
- 用SHOW显示已有的数据库句法:SHOW DATABASES [LIKE wild]如果使用LIKE wild部分,wild字符串可以是一个
- 1.删除 1)删除记录 Delete from 表名 where id ='xx' 2)
- Eric A. Meyer 对基于 Web 标准的 CSS 与 HTML 绝非一知半解,他是这个领域杰出的专家,曾写过不少 CSS 方面的书
- 本文实例讲述了javascript设计模式 – 桥接模式原理与应用。分享给大家供大家参考,具体如下:介绍:如果软件系统中某个类存在两个或多个
- 一、知识介绍:1、input() 函数,接收任意输入,将所有输入默认为字符串处理,并返回字符串类型;2、可以用作文本输入,如用户名,密码框的
- Windows环境下一、开启 Imagick 扩展1、安装PHP扩展:Imagick,下载地址 https://pecl.php.net/p
- 目录jwt流程:1.token 工具类2. 使用该中间件3. controller部分代码jwtjwt的原理和session有点相像,其目的
- 在ASP与ASP.NET之间共享对话状态(1)ASP实现原来的ASP对话只能将对话数据保存在内存中。为了将对话数据保存到SQL Server
- 实例一--爬取页面import requestsurl="https//itemjd.com/2646846.html"
- 我们在Python中经常使用会用到matplotlib画图,有些曲线和点的形状、颜色信息长时间不用就忘了,整理一下便于查找。安装matplo
- 描述:输入一个大于0的整数n,输出1到n的全排列:例如:n=3,输出[[3, 2, 1], [2, 3, 1], [2, 1, 3], [3
- 本文实例讲述了Python实现的生产者、消费者问题。分享给大家供大家参考,具体如下:生产者、消费者问题,经典的线程同步问题:假设有一个缓冲池
- 本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:使用PHP语言生成二维码,还是挺有难度的,当然
- 用python连接Oracle是总是乱码,最有可能的是oracle客户端的字符编码设置不对。本人是在进行数据插入的时候总是报关键字"
- 目录1、算数运算符:2、赋值运算符:3、比较运算符4、逻辑运算符5、 成员运算符总结大至分为以下5类运算符号算数运算符赋值运算符比
- 前言:最近正在将一个使用单文件组件的 Options API 的 Vue2 JavaScript 项目升级为 Vue3 typescript