【廖雪峰老师python教程】——filter/sorted
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))