轉(zhuǎn)載自作者:dalalaa
鏈接:http://www.reibang.com/p/c53b2b522001
來(lái)源:簡(jiǎn)書(shū)
寫(xiě)在前面:
1. lambda 匿名函數(shù)
func = lambda x: x + 1
# 等同于:
def func(x)
return x + 1
# 冒號(hào)左邊 相當(dāng)于 <形參>
# 冒號(hào)右邊 相當(dāng)于 return的<返回值>
注意, 既然我們稱(chēng) lambda 為匿名函數(shù), 所以官方并 不建議 用 func 去接收, 而是 直接使用
2. 關(guān)于 sorted
sorted()函數(shù)不會(huì)改變數(shù)組本身
>>> 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()會(huì)對(duì)list進(jìn)行修改:
>>> a = [1, 6, 5, 3, 6, 8, 99, 0]
>>> a.sort()
>>> a
[0, 1, 3, 5, 6, 6, 8, 99]
list.sort()函數(shù)只適用于數(shù)組兢哭,而sorted()還能用于其他數(shù)據(jù)結(jié)構(gòu):
>>> 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. 舉個(gè)栗子:
下面用三個(gè)元組, 組成列表 通過(guò) 使用key參數(shù), 傳入lambda匿名函數(shù) 決定按哪個(gè)參數(shù)排序。
>>> a = [
(1,2,3),
(3,4,2),
(2,1,7),
]
- 以 元組 的 第二個(gè) 元素 排序:
>>> sorted(a, key = lambda x: x[1])
[(2, 1, 7), (1, 2, 3), (3, 4, 2)]
- 以 元組 的 第三個(gè) 元素 排序:
>>> sorted(a, key = lambda x: x[2])
[(3, 4, 2), (1, 2, 3), (2, 1, 7)]
- 以 元組 的 第一個(gè) 元素 排序:
>>> sorted(a)
[(1, 2, 3), (2, 1, 7), (3, 4, 2)]
- sorted 負(fù)責(zé)對(duì) 列表a 進(jìn)行 迭代, 循環(huán)遍歷每一個(gè) 對(duì)象, 這里就是 遍歷這三個(gè)元組
- a 就是那個(gè)列表
- x 指代 元組里的 每一個(gè)對(duì)象, 即 每一個(gè)元組
- x[1] 指代 元組的 第二個(gè)元素
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()一個(gè)元組列表[(key夫嗓,value)…]
-
lambda a:a[1]
-------------> 把每一個(gè) 遍歷的對(duì)象 賦值給 a, 返回值 a[1]即每個(gè)字典對(duì)象的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')]