Python学习笔记系列——高阶函数(filter/sorted)
2024-10-16 07:27:48
一、filter
#filter()函数用于过滤序列。和map()类似,也接收一个函数和一个序列,把函数依次作用于每个元素,根据返回值是True还是False决定是否保留该元素。
#filter()函数返回的是一个Iterator,即惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。
def odd(n):
return n%2==1
ms=list(filter(odd,[1,2,3,4,5,6,7,8,9,10])) #保留奇数
print(ms) #一、过滤空字符串
def not_empty(s):
return s and s.strip()
ms=list(filter(not_empty,['Zc',' ','BOOM',None,'BLOG']))
print(ms) #二、生成范围素数数组
#构造一个从3开始的奇数序列
def _odd_iter():
n=1
while True:
n=n+2
yield n
#筛选函数
def _not_divisible(n):
return lambda x:x % n !=0
#定义一个生成器,不断返回下一个素数
def primes():
yield 2
it = _odd_iter() #初始序列
while True:
n=next(it) #返回序列的第一个数
yield n
it = filter(_not_divisible(n),it) #构造新序列
#输出1000以内的素数
for n in primes():
if n <1000:
print(n)
else:
break
上面这个用生成器写素数数组的,我这种菜鸡是真的看不懂,没思路。下面是找群里某蓝色兔头专业代言雀巢咖啡三十年的java&Python双料大佬给我写了个简单的:
def test(num):
num_list = [True] * num
num_list[0] = False
for i in range(2, num+1):
for j in range(i+i, num+1, i):
num_list[j-1] = False
return [x+1 for x in range(len(num_list)) if num_list[x]] print(test(100))
二、sorted
#sorted()可以对list进行排序,还可以接收一个key()函数实现自定义排序.
#key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。
ms=sorted([35,-9,-20,23,2],key=abs) #按绝对值大小排序 #默认情况下,对字符串排序,是按照ASCII的大小来比较的
ms1=sorted(['boom','axure','Zero','Cat']) #['axure', 'boom', 'Cat', 'Zero']
ms2=sorted(['boom','axure','Zero','Cat'],key=str.upper) #['Zero', 'Cat', 'boom', 'axure'] #反向排序,加参数reverse
ms3=sorted(['boom','axure','Zero','Cat'],key=str.upper,reverse=True)
三、练习
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
#按照名字排序
def by_name(n):
return n[0]
print(by_name(L))
L2 = sorted(L, key=by_name)
print(L2) #按照成绩降序
def by_score(n):
return n[1]
L2 = sorted(L, key=by_score,reverse=True)
print(L2)
最新文章
- S5PV210_时钟系统
- [BZOJ1861][Zjoi2006]Book 书架
- sparksql udf的运用----scala及python版(2016年7月17日前完成)
- (转) TexturePacker 3.0 使用教程
- JavaScript拼接字符串传递多个参数
- 虚拟机centos6.5 --开放端口
- 部署Ossim
- [转]https方式使用git保存密码的方式
- ASP.NET - 无限极分类
- web开发与设计--js数据类型,js运营商
- 用html+css+js做打地鼠小游戏
- mongoDB之数据库操作
- java的properties文件-jdbc优化编程(五)
- oracle修改字符集方法
- openstack(Pike 版)集群部署(六)--- Horizon 部署
- 超详细的PS抠图方法
- 微信小程序开发工具常用快捷键
- Java服务CPU飙到99%问题排查
- 内存映射文件(Memory-Mapped File)
- Android重写HorizontalScrollView仿ViewPager效果
热门文章
- jQuery筛选结果等于true的筛选
- Android ListView的XML属性
- MYSQL 外键 on语句 多表查询
- 使用ASP.Net WebAPI构建REST服务——客户端
- 用Spider引擎解决数据库垂直和水平拆分的问题
- uml各类图
- 也许,这样理解HTTPS更容易
- Python学习---IO的异步[asyncio +aiohttp模块]
- Centos7下Mysql通过.frm和.ibd恢复数据
- 在 vSphere 5.x/6.0 中配置 Network Dump Collector 服务 (2002954)