您当前的位置: 首页 >  Python

插件开发

暂无认证

  • 0浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python-lambda表达式-map(元素循环)-reduce(元素累积)-filter(元素过滤)-sorted(元素排序)

插件开发 发布时间:2022-05-08 07:00:00 ,浏览量:0

文章目录
    • 1.什么是lambda表达式
    • 2.与def相对有哪些优点
    • 3.使用范例
      • 3.1.map
      • 3.2.reduce
      • 3.3.filter
      • 3.4.sorted
    • 4.作者答疑

1.什么是lambda表达式

lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。lambda是一个表达式而不是一个语句。 lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。 lambda 函数不能包含命令,包含的表达式不能超过一个。

2.与def相对有哪些优点

对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁; 对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高程序执行的性能。

3.使用范例 3.1.map

map() 会根据提供的函数对指定序列数组做映射,并返回迭代映射序列。 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。


>>> def square(x) : # 计算平方数
...     return x ** 2
...
>>> map(square, [1,2,3,4,5])    # 计算列表各个元素的平方
     # 返回迭代器
>>> list(map(square, [1,2,3,4,5]))   # 使用 list() 转换为列表
[1, 4, 9, 16, 25]
>>> list(map(lambda x: x ** 2, [1, 2, 3, 4, 5]))   # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
>>>
3.2.reduce

reduce() 函数会对参数序列中元素进行累积。函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。Python3.x reduce() 已经被移到 functools 模块里,如果我们要使用,需要引入 functools 模块来调用 reduce() 函数:

from functools import reduce

from functools import reduce

def add(x, y) :            # 两数相加
    return x + y
sum1 = reduce(add, [1,2,3,4,5])   # 计算列表和:1+2+3+4+5
sum2 = reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函数
print(sum1)
print(sum2)

reduce函数执行步骤: 1.初始,function被调用,并传入sequence的前两个items,计算得到result并返回 2.function继续被调用,并传入上一步中的result,和sequence中下一个item,计算得到result并返回。一直重复这个操作,直到sequence都被遍历完,返回最终结果。

3.3.filter

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

def is_odd(n):
  return n % 2 == 1
 
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
list(filter(lambda x:x%2==1, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]
3.4.sorted

sorted() 作为 Python 内置函数之一,其功能是对序列(列表、元组、字典、集合、还包括字符串)进行排序。

list = sorted(iterable, key=None, reverse=False) 其中,iterable 表示指定的序列,key 参数可以自定义排序规则;reverse 参数指定以升序(False,默认)还是降序(True)进行排序。sorted() 函数会返回一个排好序的列表。

可以进行自定义的排序,但并不是直接将自定义比较函数赋给key,在python3中,需要import functools来传递比较函数。 注意,在Python3中,自定义比较函数的返回值必须为[1, -1, 0],具体如何使用以下列简单程序为例:

from functools import cmp_to_key

nums = [1, 3, 2, 4];
nums.sort(key=cmp_to_key(lambda a, b: a - b));
sorted(nums,key=cmp_to_key(lambda a, b: a - b));
print(nums)  # [1, 2, 3, 4]

多指标排序,先按照成绩降序排序,相同成绩的按照名字升序排序。源码如下所示:

d1 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}]
l = sorted(d1, key=lambda x:(-x['score'], x['name']))
print(l)
#输出结果:
[{'name': 'alice', 'score': 38}, {'name': 'christ', 'score': 28}, {'name': 'darl', 'score': 28}, {'name': 'bob', 'score': 18}]
4.作者答疑

如果疑问,敬请留言。

关注
打赏
1665481431
查看更多评论
立即登录/注册

微信扫码登录

0.0417s