Python用any()函数检查字符串中的字母以及如何使用all()函数


Posted in Python onApril 14, 2022

回想下,在 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 个条件 c1c2c3...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 个条件 c1c2c3...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

到此这篇关于Python中的 any() 函数和 all() 函数的文章就介绍到这了!

Python 相关文章推荐
python实现根据主机名字获得所有ip地址的方法
Jun 28 Python
用Python抢过年的火车票附源码
Dec 07 Python
python numpy函数中的linspace创建等差数列详解
Oct 13 Python
python爬虫实例详解
Jun 19 Python
python执行CMD指令,并获取返回的方法
Dec 19 Python
Pandas分组与排序的实现
Jul 23 Python
学习和使用python的13个理由
Jul 30 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
Nov 21 Python
利用python控制Autocad:pyautocad方式
Jun 01 Python
python中线程和进程有何区别
Jun 17 Python
python实现黄金分割法的示例代码
Apr 28 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 Python
python在package下继续嵌套一个package
Apr 14 #Python
Github 使用python对copilot做些简单使用测试
使用Python拟合函数曲线
Apr 14 #Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
python中 .npy文件的读写操作实例
Apr 14 #Python
Python Matplotlib绘制等高线图与渐变色扇形图
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 #Python
You might like
php单件模式结合命令链模式使用说明
2008/09/07 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
js CSS操作方法集合
2008/10/31 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
jquery二级目录选中当前页的css样式
2016/12/08 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
深入研究React中setState源码
2017/11/17 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
2018/03/13 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
jQuery each和js forEach用法比较
2019/02/27 jQuery
vue 实现tab切换保持数据状态
2020/07/21 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
[56:58]VP vs Optic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实用日期时间处理方法汇总
2015/05/09 Python
python字符串中的单双引
2017/02/16 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
详解python的argpare和click模块小结
2019/03/31 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
Python笔记之代理模式
2019/11/20 Python
目前不被任何主流浏览器支持的CSS3属性汇总
2014/07/21 HTML / CSS
APM Monaco中国官网:来自摩纳哥珠宝品牌
2017/12/27 全球购物
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
幼儿园教师教学反思
2014/02/06 职场文书
学校读书活动总结
2014/06/30 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
2014年法务工作总结
2014/12/11 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技
Python时间操作之pytz模块使用详解
2022/06/14 Python