转载自作者:dalalaa
链接:https://www.jianshu.com/p/c53b2b522001
来源:简书
写在前面:
1. lambda 匿名函数
func = lambda x: x + 1
# 等同于:
def func(x)
return x + 1
# 冒号左边 相当于 <形参>
# 冒号右边 相当于 return的<返回值>
注意, 既然我们称 lambda 为匿名函数, 所以官方并 不建议 用 func 去接收, 而是 直接使用
2. 关于 sorted
sorted()函数不会改变数组本身
>>> a = [1,6,5,3,6,8,99,0]
>>> sorted(a)
[0, 1, 3, 5, 6, 6, 8, 99]
>>> a
[1, 6, 5, 3, 6, 8, 99, 0]
而 list.sort()会对list进行修改:
>>> a = [1, 6, 5, 3, 6, 8, 99, 0]
>>> a.sort()
>>> a
[0, 1, 3, 5, 6, 6, 8, 99]
list.sort()函数只适用于数组,而sorted()还能用于其他数据结构:
>>> b = {1:'a',3:'b',7:'d',4:'4',2:'4'}
>>> sorted(b)
[1, 2, 3, 4, 7]
>>> b
{1: 'a', 2: '4', 3: 'b', 4: '4', 7: 'd'}
>>> b.sort()
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
b.sort()
AttributeError: 'dict' object has no attribute 'sort'
3. 举个栗子:
下面用三个元组, 组成列表 通过 使用key参数, 传入lambda匿名函数 决定按哪个参数排序。
>>> a = [
(1,2,3),
(3,4,2),
(2,1,7),
]
- 以 元组 的 第二个 元素 排序:
>>> sorted(a, key = lambda x: x[1])
[(2, 1, 7), (1, 2, 3), (3, 4, 2)]
- 以 元组 的 第三个 元素 排序:
>>> sorted(a, key = lambda x: x[2])
[(3, 4, 2), (1, 2, 3), (2, 1, 7)]
- 以 元组 的 第一个 元素 排序:
>>> sorted(a)
[(1, 2, 3), (2, 1, 7), (3, 4, 2)]
- sorted 负责对 列表a 进行 迭代, 循环遍历每一个 对象, 这里就是 遍历这三个元组
- a 就是那个列表
- x 指代 元组里的 每一个对象, 即 每一个元组
- x[1] 指代 元组的 第二个元素
4. 字典排序
>>> b = {1:'a', 3:'b', 7:'d', 4:'c', 2:'k'}
- 直接用key排序
>>> sorted(b)
[1, 2, 3, 4, 7]
- 下方代码流程:
-
sorted(b.items()...
-----> 遍历 b.items()一个元组列表[(key,value)…]
-
lambda a:a[1]
-------------> 把每一个 遍历的对象 赋值给 a, 返回值 a[1]即每个字典对象的value值
-
key = ...
------------------> 接收 lambda 的返回值 a[0]
剩下的 交给天意吧...
>>> sorted(b.items(), key = lambda a:a[1]) # a[1] 即 字典的value
[(1, 'a'), (3, 'b'), (4, 'c'), (7, 'd'), (2, 'k')]
网友评论