一、filter
filter 函数和 map 函数有类似之处,两个都是把序列中的元素作用于函数中,且都由两个参数。但是 filter 函数用于判断可迭代对象中的元素是否符合函数的要求,如果符合,则返回对应的元素。也可以理解为过滤函数,俗称筛子。
filter(function or None, iterable)
# 实例1,取1-10 中所有的偶数
def func(x):
return x%2==0
print(list(filter(func,[1,2,3,4,5,6,7,8,9,10])))
>>> [2, 4, 6, 8, 10]
# func 函数中,x%2==0,是一个判断语句,含义是,把传入的序列元素带入判断语句,如果判断结果为True,则返回该元素,如果不符合,抛弃该元素。
# 实例2,输出列表中属于字符串的元素
def func(n):
return isinstance(n,str)
print(list(filter(func,[1,True,‘a‘,"Python",666])))
>>> [‘a‘, ‘Python‘]
>>> isinstance 函数用于判断元素是否属于 str 类型,如果判断结果为True,则返回该元素。
二、sorted 函数
sorted用于排序可迭代对象。
sorted(iterable, /, *, key=None, reverse=False)
- iterable 为可迭代对象
- key 为运算函数
- reverse 为排序方向
# 实例1,给list [4,8,3,1,9,6,7,2,5] 排序
a=[4,8,3,1,9,6,7,2,5]
print(list(sorted(a)))
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 我们并没有给 key 赋值,所以,sorted 函数对 list 进行常规排序,也就是正常数学运算方式。
# 实例2,给 [4,-8,3,-1,9,6,-7,2,5] 排序
L1=[4,-8,3,-1,9,6,-7,2,5]
print(list(sorted(L1,key=abs)))
>>> [-1, 2, 3, 4, 5, 6, -7, -8, 9]
# key = abs 这个参数,相当于把 list 中的元素依次传入abs函数,进行取绝对值,按照这个值进行排序,但是这并不会改变元素。
# 实例3,我们对 [4,-8,3,-1,9,6,-7,2,5] 进行倒序排序
L2=[4,-8,3,-1,9,6,-7,2,5]
print(list(sorted(L2,key=abs,reverse=True)))
>>> [9, -8, -7, 6, 5, 4, 3, 2, -1]
# 结果已经倒过来了,reverse 的含义为是否给该函数倒序,如果为 True,则进行倒序,否则不进行。
这里说明一下,key 的值是函数的本身(上节课我们提到过)。那么,我们可不可以调用自己定义的函数呢?理论上是可以的,我们实践一下。
# 实例4,我们对一组 tuple 进行排序
L = [(‘Bob‘, 75), (‘Adam‘, 92), (‘Bart‘, 66), (‘Lisa‘, 88)]
def func(x):
return x[0].lower()
print(sorted(L,key=func))
>>> [(‘Adam‘, 92), (‘Bart‘, 66), (‘Bob‘, 75), (‘Lisa‘, 88)]
# 实践证明,这个是可以的。
# 实例5,那能不能按照成绩来排序呢?
def func(x):
return x[1]
print(sorted(L,key=func))
>>> [(‘Bart‘, 66), (‘Bob‘, 75), (‘Lisa‘, 88), (‘Adam‘, 92)]
# OK!
关注公众号,了解更多!
原文:https://www.cnblogs.com/pyshadow/p/10400361.html