【高阶函数】filter && sorted && map & reduce

使用说明:本内容无代码示例图,需要各位看官大人自行运行,自行体会

filter

  • 功能:用于过滤序列
  • 把传入的参数依次作用于序列的每一个元素,根据返回的是 True 或者 False 决定是否保留该元素

例 1 :去掉奇数

# 去掉奇数
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


def fun(num):
    if num % 2 == 0:
        return True
    return False


new_list = filter(fun, list1)

print(list(new_list))

例 2 :

# 去掉不想要的数据
data = [['姓名', '年龄', '爱好'], ['tom', 'man', 'basketball'], ['cat', '18', '无']]


def fun1(x):
    x = str(x)
    if x == '无':
        return False
    return True


for line in data:
    # print('数据内容', line)
    m = filter(fun1, line)
    print(list(m))

sorted 排序

  • 默认是升序排序,自己也可以修改排序的依据
  • sorted 排序使用较广,难度不高,建议及时掌握
list1 = [4,7,2,6,3]

# 默认升序排序
list2 = sorted(list1)
print(list1)
print(list2)  # [2, 3, 4, 6, 7]

# 按绝对值大小排序
list3 = [-7,-4,1,10]
list4 = sorted(list3,key=abs)
print(list3)
print(list4)  # [1, -4, -7, 10]

# 降序 False 升序 True 降序
list5 = sorted(list1,reverse=True)
print(list5)

# 给字母排序
list6 = ['a','x','q','z']
list7 = sorted(list6)
print(list7)

# 根据字符的长度排序

list8 = ['abc','xy','qwert','zzzzzzz']
list9 = sorted(list8,key=len)
print(list9)

# key也可以传自己定义好的方法

map 与 reduce

  • 难度较高
Map(映射)"和"Reduce(归约)

map(fn,1sd)
参数1是函数
参数2是序列
功能:将传入的函数依次作用在序列中每一个元素,并把结果作为新的iterator返回
reduce(fnc1,1sd)
参数1为函数
参数2为列表
功能:一个函数作用在序列上,这个函数必须接受两个参数
     reduce把结果继续和序列的下一个元素累计运算
reduce(f,[a,b,c,d])
f(f(f(a,b),c),d)
 
  • map 的使用 
from functools import reduce


def chr2int(char):
    return {'1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '0': 0}[char]


list1 = ['2', '1', '6', '5']

res = map(chr2int, list1)

print(list(res))
  •  reduce 的使用
# 求一个序列的和
list2 = [1, 2, 3, 4, 5]


def mySum(x, y):
    return x + y


r = reduce(mySum, list2)

print(r)
  • map 与 reduce 结合使用
# 给定字符转为整数(不用int方法)

def str2int(str1):
    def fc(x, y):
        return x * 10 + y

    def fs(char):
        return {'1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '0': 0}[char]

    return reduce(fc, map(fs, list(str1)))


a = str2int('12345')

print(a)
print(type(a))
发布了96 篇原创文章 · 获赞 103 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38114487/article/details/104562129