Python内部提供了序列过滤函数 filter 。
接收参数为 一个函数以及一个序列。函数依次作用于序列中的每一个元素,并根据返回值是True 或者 False 判断是否删除该元素。
样例如下
# 样例 判断是否奇数
def is_odd(x):
return x % 2 == 1
L = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a = list(filter(is_odd, [1, 2, 3, 4, 5, 6, 7]))
print(a)
# 输出
[1, 3, 5, 7]
Pathon内部提供了序列排序函数 sorted 。
>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]
此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:
>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
当然,key传递的不一样要是python内置的函数,也可以是自定义函数,如:
# 样例 根据绝对值 升序
def test_sort(x):
return abs(x)
L = [-7, -12, 3, 4, 5, 6, 7, 8, 9]
a = list(sorted(L,key=test_sort))
print(a)
# 输出
[3, 4, 5, 6, -7, 7, 8, 9, -12]
此外,如果我们需要对序列进行反向排序,我们可以通过第三个参数 resvers=true进行配置。这样我们就无需改变key函数。如下所示
# 根据绝对值降序
def test_sort(x):
return abs(x)
L = [-7, -12, 3, 4, 5, 6, 7, 8, 9]
a = list(sorted(L,key=test_sort,reverse=True))
print(a)
# 输出
[-12, 9, 8, -7, 7, 6, 5, 4, 3]
小结
sorted()也是一个高阶函数。用sorted()排序的关键在于实现一个映射函数。