zoukankan      html  css  js  c++  java
  • Python 内置函数&filter()&map()&reduce()&sorted()

    常用内置函数

    Python 2.x 返回列表,Python 3.x 返回迭代器

    在进行筛选或映射时,输出的结果是一个数组,需要list帮助.

    如:print(list(map(lambda x:x+1, [1,2,3])))

    一、filter() ——过滤、筛选

    刚接触filter时 ,运行总是出现<filter object at 0x000001B68F052828> 得不到想要的数据,后来发现是因为filter的结果是一个数组, 需要 list 帮助,后来将print(f) 改为 print(list(f)) 能成功运行

    语法: filter(function,iterable)

    function: 用来筛选的函数,在filter中会自动的把iterable中的元素传递给function,然后根据function返回的True或者False来判断是否保留此项数据
    iterable:可迭代对象
    lst = [{'id':1,'name':'alex','age':18},
            {'id':1,'name':'wusir','age':17},
            {'id':1,'name':'taibai','age':16},
          ]
    
    ls = filter(lambda e:e['age'] > 16,lst)
    print(list(ls))
    
    结果:
    [{'id': 1, 'name': 'alex', 'age': 18},
     {'id': 1, 'name': 'wusir', 'age': 17}]
    

    二、map() ——映射函数

    语法: map(function,iterable)

    对可迭代对象中的每一个元素执行相同函数功能的操作

    function:它是一个功能函数,可以是lambda函数,也可以是def函数,它所做的操作是对每一个元素执行相同函数功能的操作
    iterable:可迭代对象,也可理解为一个或多个序列,序列中是每一个要操作的元素对象

    注意:map函数不改变原有的序列,而是返回一个新的序列

    以下实例是使用lambda函数和结合函数使用的不同写法:

    lis = [1, 2, 3, 4, 5]
    lis1 = []
    for i in lis:
        def square(x):  # 计算平方数
    
            return x ** 2
        a = square(i)
        lis1.append(a)
    print(lis1)
    
    结果:[1, 4, 9, 16, 25]
    
    
    def square(x):  # 计算平方数
        return x ** 2
    
    a = map(square, [1, 2, 3, 4, 5])  # 计算列表各个元素的平方
    print(list(a))
    
    结果:[1, 4, 9, 16, 25]
    
    a = map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函
    print(list(a))
    
    结果:[1, 4, 9, 16, 25]
    

    三、reduce() ——累计算

    在Python2.x版本中recude是直接 import就可以的, Python3.x版本中需要从functools这个包中导入

    语法:reduce(function,iterable)

    reduce是先把列表中的前俩个元素取出计算出一个值,然后临时保存,接下来用这个临时保存的值和列表中第三个元素进行计算,求出一个新的值将最开始临时保存的值覆盖掉,依次类推,得到最终的累计和,并返回

    这两个参数必须都要有,缺一个不行

    注意:我们放进去的可迭代对象没有更改

    from functools import reduce
    def func(x,y):
        return x + y
    
    ret = reduce(func,[3,4,5,6,7])
    print(ret) 
    
    结果:25
    
    
    匿名函数版
    from functools import reduce
    l = reduce(lambda x,y:x*10+y,[1,2,3,4])		
    print(l)
    
    结果:1234
    
    # x = 1,y = 2	12
    # x = 12,y = 3	123
    # x = 123,y = 4	1234
    

    累计加

    from functools import reduce
    
    lis = [1, 2, 3, 4]
    result = reduce(lambda x, y: x+y, lis)
    print(result)
    
    结果:10
    

    统计出现的次数

    from functools import reduce
    str1 = "fufhfjhjfurfh"
    b =reduce(lambda a,x:a+x.count("f"),str1,0)		# 0是从0算起
    print(b)
    
    结果:5
    
    from functools import reduce
    str1 = "fufhfjhjfurfh"
    b =reduce(lambda a,x:a+x.count("f"),str1,1)		# 1是从1算起
    print(b)
    
    结果:6
    

    四、sorted() ——排序

    sort 与 sorted 区别:

    sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

    sort 方法是对已经存在的列表进行操作,无返回值,sorted 方法不是在原来的基础上进行的操作的,返回的是一个新的 list

    语法:sorted(iterable, cmp=None, key=None, reverse=False)

    iterable:可迭代对象
    cmp :比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
    key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    reverse:排序规则,reverse = True 降序 , reverse = False 升序(默认)

    实例

    a = [5, 7, 6, 3, 4, 1, 2]
    b = sorted(a)  # 保留原列表
    print(b)
    
    lis = [('b', 2), ('a', 1), ('c', 3), ('d', 4)]
    b = sorted(lis, key=lambda x: x[1])  # 利用key
    print(b)
    
    students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
    b = sorted(students, key=lambda s: s[2])  # 按年龄排序
    print(b)
    
    b = sorted(students, key=lambda s: s[2], reverse=True)  # 按降序
    print(b)
    
    结果:[1, 2, 3, 4, 5, 6, 7]
         [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
         [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
         [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
    

    只需了解

    一、max() —— 求最大值

    实例:

    print(max([1,2,3]))  # 返回此序列最大值
    

    可以在main函数加key索引

    ret = max([1,2,-5,],key=abs)  # 按照绝对值的大小,返回此序列最小值
    print(ret)
    # 加key是可以加函数名,min自动会获取传入函数中的参数的每个元素,然后通过你设定的返回值比较大小,返回最大的传入的那个参数。
    
    print(max(1,2,-5,6,-3,key=lambda x:abs(x)))  # 可以设置很多参数比较大小
    
    dic = {'a':3,'b':2,'c':1}
    print(max(dic,key=lambda x:dic[x]))
    
    # x为dic的key,lambda的返回值(即dic的值进行比较)返回最大的值对应的键
    
    

    二、min() ——求最小值

    实例:

    print(min([1,2,3]))  # 返回此序列最小值
    

    可以在main函数加key索引

    ret = min([1,2,-5,],key=abs)  # 按照绝对值的大小,返回此序列最小值
    print(ret)
    # 加key是可以加函数名,min自动会获取传入函数中的参数的每个元素,然后通过你设定的返回值比较大小,返回最小的传入的那个参数。
    
    print(min(1,2,-5,6,-3,key=lambda x:abs(x)))  # 可以设置很多参数比较大小
    
    dic = {'a':3,'b':2,'c':1}
    print(min(dic,key=lambda x:dic[x]))
    
    # x为dic的key,lambda的返回值(即dic的值进行比较)返回最小的值对应的键
    
    
  • 相关阅读:
    LG gram 双系统全指南
    离散数学读书记录
    研究小报告:掺杂硅脂对处理器散热能力的影响
    SICP 课程总结 & 复习
    maxHeap 的 python 实现
    KDD Cup 2018 冠军团队 思路分享
    mergeSort, quickSort, shellSort 的 python 实现
    数据集-搜集
    【NOIP2018模拟赛】
    【NOIP2018 模拟】
  • 原文地址:https://www.cnblogs.com/shenhongbo/p/11572061.html
Copyright © 2011-2022 走看看