filter
Python 内建的 filter()函数用于过滤序列.
和 map()类似, filter()也接收一个函数和一个序列. 和 map()不同的是, filter()把传入的函数依次作用于每个元素, 然后根据返回值是 True 还是 False 决定保留还是丢弃该元素.
注意到 filter()函数返回的是一个 Iterator, 也就是一个惰性序列, 所以要强迫 filter()完成计算结果, 需要用 list()函数获得所有结果并返回 list.
看看素数构造的过程:
- # 用生成器产生一个奇数序列 -- 无穷数列
- def odd():
- n = 3
- while True:
- yield n
- n = n + 2
- # 筛选函数函数
- def is_divide(n):
- return lambda x:x%n> 0
- # 利用筛选器构造筛选函数 -- 函数结果为素数序列
- def primes():
- yield 2
- it = odd()
- while True:
- n = next(it)
- yield n
- it = filter(is_divide(n),it)
- # 素数序列打印
- for i in primes():
- if(i <100):
- print(i)
- else: break # 由于 primes 是无穷数列, 记得加上 else break 作为终止条件.
这里的筛选函数, lambda 方法记一记, 直接将 it 转化为 lambda 中的参数
sorted
Python 内置的 sorted()函数可以对 list 进行排序
sorted()函数也是一个高阶函数, 它还可以接收一个 key 函数来实现自定义的排序
要进行反向排序, 不必改动 key 函数, 可以传入第三个参数 reverse=True
- # 姓名成绩序列
- L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
- # key 函数定义
- def name(s):
- return s[0]
- def score(s):
- return s[1]
- # 排序 [取 L 中的元素针对 key 函数方法的返回结果进行排序 --> 还原]
- print(sorted(L,key=name))
- print(sorted(L,key=score))
来源: https://www.cnblogs.com/ChaoyuanJam/p/9739336.html