文章目录
- 前言
- 一、any()、all()
- 1. any()、all()
- 2. python中的假值
- 3.常见用法
- 二、map()、filter()
- 1.map()
- 2.filter()
- 三、生成器表达式
- 总结
前言
python中,涉及到批量数据的断言时。
1)经常使用的内置函数。
提示:以下是本篇文章正文内容,下面案例可供参考
一、any()、all()
1. any()、all()
any()、all() 是 python的内置函数,用于判断可迭代对象中元素的布尔值。
1.1、适合在代码验证中,涉及到批量数据的断言时,any()、all()是很常用的用法。
1)语法结构
入参: 可迭代对象
出参: 布尔值。
运行逻辑:短路求值–>如all( 可迭代对象)。 从头开始,只要遇到 第一个假值,程序立马结束运行、得到结果。同any()
| any(iterable) | 只要至少一个元素为真,返回 True;否则返回 False |
|---|---|
| all(iterable) | 所有元素都为真时返回 True;否则返回 False |
| – | – |
2. python中的假值
即布尔值 为False的值, 可以使用bool()判断得到。
常见:
经常用于 if判断的简化,如
# 检查列表是否为空(传统写法)iflen(my_list)==0:pass# 更 Pythonic 的写法ifnotmy_list:# 空列表是假值pass3.常见用法
3.1 与可迭代对象
由于短性求值特点:
1) 常常 与 ‘生成器表达式’ 搭配。
# 推荐写法(生成器表达式,惰性)any(expensive_check(x)forxindata)2)
numbers=[1,3,5,7]1)运算类:# 判断是否全部为奇数print(all(n%2==1forninnumbers))# True# 判断是否存在偶数print(any(n%2==0forninnumbers))# False2)多条件defvalidate_data(data):# 断言列表中不能有 None 或空字符串assertnotany(visNoneorv==""forvindata),"数据包含无效值"3) 假值筛选notuser_input=["name","age",""]# 是否有空字段ifany(notfieldforfieldinuser_input):print("请填写所有字段")二、map()、filter()
1.map()
map(function,iterable,...)# 可传入多个可迭代对象- 入参
function:函数引用
iterable1,iterable2 : 多个可迭代对象。
2)返回:
将 可迭代对象的每个元素, 作为func的入参(对应iterable的个数); 返回func所有结果的迭代器。
3)特点:
返回值的元素个数。由最短的 iterable决定
nums=[1,2,3,4]squared=map(lambdax:x**2,nums)print(list(squared))# [1, 4, 9, 16]list1=[1,2,3]list2=[4,5,6]result=list(map(lambdax,y:x+y,list1,list2))# [5, 7, 9]4) 常用
类型转换,数值运算, 提取属性等。
应用: 案例1:数据清洗管道 ```python raw_data=[" 123 ","45.6","78 "]pipeline=map(str.strip,raw_data)# 去空格pipeline=map(float,pipeline)# 转浮点数pipeline=map(lambdax:round(x,1),pipeline)# 保留1位小数result=list(pipeline)# [123.0, 45.6, 78.0]组合filter()使用: ```python nums=[1,2,3,4,5]even_squares=map(lambdax:x**2,filter(lambdax:x%2==0,nums))# [4, 16]2.filter()
筛选满足条件的元素。
所以 function函数里面,是布尔判断式。 如果function 返回值是None,
则过滤掉所有假值元素。
filter(function,iterable)- 入参
function: 返回布尔值(或真/假值)。
iterable: 可迭代对象。
2)返回:
一个迭代器,包含满足条件的元素。
# 筛选偶数nums=[1,2,3,4,5,6]evens=filter(lambdax:x%2==0,nums)print(list(evens))# [2, 4, 6]# 去掉假值(function=None)mixed=[0,1,'','hello',None,[],[1,2]]cleaned=filter(None,mixed)print(list(cleaned))# [1, 'hello', [1,2]]| map | filter | |
|---|---|---|
| 返回值 | 对每个元素应用函数后的新值的迭代器 | 原元素中满足条件的迭代器 |
| 函数作用 | 转换元素(一对一) | 判断元素是否保留(是/否) |
| 函数返回值 | 任意类型 | 布尔值(或真/假值)) |
三、生成器表达式
一个列表中多个字典, 我想查找 其中的键XName 是 AUTO0000176 的字典,并获取这个字典。
1、常规写法:forsampdicinlistdict:ifsampdic['XNmae']=='AUTO0000176':获取 sampdicbreak2、更Pythonic 的写法next((sampdicforsampdicinlistdictifsampdic['XNmae']=='AUTO0000176'),None)使用生成器表达式,惰性计算。
1)next() 函数:从迭代器中获取下一个值
2)默认值参数:None(当迭代器耗尽时返回)