pythonsortlambda
① python中sort函數的用法
sort函數基本用法seq.sort(key=None,reverse=False)參數解釋:seq表示一個序列key主要是用來進行比較的元素,只有一個參數。
sorted函數不會改變原有的list,而是返回一個新的排好序的list。如果你想使用就地排序,也就是改變原list的內容,那麼可以使用list.sort()的方法,這個方法的返回值是None。
另一個區別是,list.sort()方法只是list也就是列表類型的方法,只可以在列表類型上調用。而sorted方法則是可以接受任何可迭代對象。
list.sort()和sorted()函數都有一個key參數,可以用來指定一個函數來確定排序的一個優先順序。比如,這個例子就是根據大小寫的優先順序進行排序。
key參數的值應該是一個函數,這個函數接受一個參數然後返回以一個key,這個key就被用作進行排序。這個方法很高效,因為對於每一個輸入的記錄只需要調用一次key函數。
歷史背景:
1970年,AT&T貝爾實驗室的工作人員D.Ritchie和K.Thompson共同研發了C語言。研製C語言的初衷是用它編寫UNIX系統程序,因此,實際上C語言是UNIX的「副產品」。1971年,瑞士聯邦技術學院N.Wirth教授發明了第一個結構化的編程語言Pascal。
20世紀70年代中期,本賈尼·斯特勞斯特盧普在劍橋大學計算機中心工作。斯特勞斯特盧普希望開發一個既要編程簡單、正確可靠,又要運行高效、可移植的計算機程序設計語言。而以C語言為背景,以Simula思想為基礎的語言,正好符合斯特勞斯特盧普的初衷和設想。
1979年,本賈尼·斯特勞斯特盧普到了AT&T貝爾實驗室,開始從事將C改良為帶類的C(Cwithclasses)的工作。、1983年,該語言被正式命名為C++。1985年、1990年和1994年,C++先後進行3次主要修訂。
② python里students.sort(key=lambda x: x['name']),兩個x的意思是什麼
lambda x:x ['name']是一個匿名函數(俗稱lambda表達式),冒號前面的x是函數的參數,sort函數會把列表的每個字典傳給x,而x['name']是函數的函數體,意思是返回字典x的name鍵的值。
這個代碼的意思就是按列表中每個字典的name鍵的升序來對列表排序。
其實,students.sort(key=lambda x:x['name'])就是相當於這樣:
#先定義一個函數
def k(x):return x['name']
#key按關鍵字傳參排序
students.sort(key=k)
③ python lambda函數用法
這里lambda x的x是函數的參數,是lst的元素(這里是一個元組),
x[1]是函數的返回值,是lst元素(元組)的第2個元素即字元串,
所以,lst.sort(key=lambda x:x[1])是以lst元素(元組)的第二個元素為key排序,默認為升序
排序後的lst為[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
print(lst[3][1][2])是列印排序後的lst中的第4個元素(元組)的第2個元素(字元串)的第3個字元,結果就是列印字元串two的字元o
④ python列表排序方法
列表的sort方法就是用來進行排序的。
主要就是兩個參數,key,reverse
先說reverse,這個很簡單,就是指出是否進行倒序排序:一般情況下,1排在2的前面,而倒序則相反。
key參數:一般它是一個函數,它接受列表中每一個元素,返回一個可用用於比較的值。
s=[1,2,3,4,5]
s.sort(key=lambda _: _**2%7)
print(s)
輸出的是:[1, 3, 4, 2, 5]
如果看不懂lambda表達式,可以看這一段等價的寫法:
def myfn(x):
....return (x * x) % 7
s=[1,2,3,4,5]
s.sort(key=myfn)
print(s)
輸出的結果是一樣的。
key使用的函數可以是自定義函數也可以pytho內置的函數,或者是某個類或者實例的方法,只要它能接受一個參數,返回一個可比較的值即可。比如這樣:
s=[[1,2,4],[3,3,5],[1,1,1],[5,7,9]]
s.sort(key=max) # 直接使用max函數作為排序依據
print(s)
[[1, 1, 1], [1, 2, 4], [3, 3, 5], [5, 7, 9]]
⑤ python Lambda 形式的使用
4.7.5. Lambda 形式
出於實際需要,有幾種通常在函數式編程語言例如 Lisp 中出現的功能加入到了 Python。通過 lambda 關鍵字,可以創建短小的匿名函數。這里有一個函數返回它的兩個參數的和: lambda a, b: a+b。 Lambda 形式可以用於任何需要的函數對象。出於語法限制,它們只能有一個單獨的表達式。語義上講,它們只是普通函數定義中的一個語法技巧。類似於嵌套函數定義,lambda 形式可以從外部作用域引用變數:
>>> def make_incrementor(n):
... return lambda x: x + n
...
>>> f = make_incrementor(42)
>>> f(0)
42
>>> f(1)
43
上面的示例使用 lambda 表達式返回一個函數。另一個用途是將一個小函數作為參數傳遞:
>>> pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
>>> pairs.sort(key=lambda pair: pair[1])
>>> pairs
[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two