在python中對list進行排序有兩種方法:
1.用list的成員函式sort進行排序
2.用built-in函式sorted進行排序
sorted與sort除了乙個是序列作為引數,乙個是序列呼叫該函式,其他引數幾乎完全一致,下面逐一來介紹其用法及效果:
sort說明
help(list.sort)sorted說明help on method_descriptor:
sort(…)
l.sort(cmp=none, key=none, reverse=false) – stable sort in place;
cmp(x, y) -> -1, 0, 1
help(sorted)iterable:是可迭代型別;help on built-in function sorted in modulebuiltin:
sorted(…)
sorted(iterable, cmp=none, key=none, reverse=false) –> new sorted list
cmp:用於比較的函式,比較什麼由key決定,有預設值,迭代集合中的一項;
key:用列表元素的某個屬性和函式進行作為關鍵字,有預設值,迭代集合中的一項;
reverse:排序規則. reverse = true 或者 reverse = false,有預設值。
注;一般來說,cmp和key可以使用lambda表示式。
sort()與sorted()的不同在於,sort是在原位重新排列列表,而sorted()是產生乙個新的列表。
sorting basic:
>>>
print sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]
>>> l = [5, 2, 3, 1, 4]
>>> l.sort()
>>>
print l
[1, 2, 3, 4, 5]
sorting cmp:
>>>l = [('b',2),('a',1),('c',3),('d',4)]
>>>print sorted(l, cmp=lambda x,y:cmp(x[1],y[1]))
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
sorting keys:
>>>l = [('b',2),('a',1),('c',3),('d',4)]
>>>print sorted(l, key=lambda x:x[1]))
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
sorting reverse:
>>>
print sorted([5, 2, 3, 1, 4], reverse=true)
[5, 4, 3, 2, 1]
>>>
print sorted([5, 2, 3, 1, 4], reverse=false)
[1, 2, 3, 4, 5]
注:效率key>cmp(key比cmp快)
在sorting keys中:我們看到,此時排序過的l是僅僅按照第二個關鍵字來排的,如果我們想用第二個關鍵字
排過序後再用第乙個關鍵字進行排序呢?
l = [(『d』,2),(『a』,4),(『b』,3),(『c』,2)]print sorted(l, key=lambda x:(x[1],x[0]))
[(『c』, 2), (『d』, 2), (『b』, 3), (『a』, 4)]
>>>d=
>>>sorted(d.keys())
['a', 'b', 'c']
>>>
直接使用sorted(d.keys())就能按key值對字典排序,這裡是按照順序對key值排序的,如果想按照倒序排序的話,則只要將reverse置為true即可。
要對字典的value排序則需要用到key引數,在這裡主要提供一種使用lambda表示式的方法,如下:
>>>d=
>>>sorted(d.items(),key=lambda item:item[1])
這裡的d.items()實際上是將d轉換為可迭代物件,迭代物件的元素為[(『a』, 3), (『c』, 1), (『b』, 2)],items()方法將字典的元素轉化為了元組,而這裡key引數對應的lambda表示式的意思則是選取元組中的第二個元素作為比較引數(如果寫作key=lambda item:item[0]的話則是選取第乙個元素作為比較物件,也就是key值作為比較物件。lambda x:y中x表示輸出引數,y表示lambda函式的返回值),所以採用這種方法可以對字典的value進行排序。注意排序後的返回值是乙個list,而原字典中的名值對被轉換為了list中的元組。
設有n個正整數,將他們連線成一排,組成乙個最大的多位整數.
例如:3個整數13,312,343,連成的最大整數為:34331213
又如:4個整數7,13,4,246連線成的最大整數為7424613
現在給你乙個正整數列表l,請你輸出用這些正整數能夠拼接成的最大整數。
note:測試資料已於2023年11月13日更新,以前通過的**不一定能夠再次通過。
運用sorted**如下:
maxlen = len(str(max(l)))
b = [ for x in l]
#print b
tmpret = [value["old"] for value in sorted(b,key=lambda s:s["new"],reverse=true)]
print(''.join(tmpret))
輸出結果:
b= [, , , ]b中包含了多個字典,如何對每個字典中的『new』進行排序呢?7424613
參考**:
特別推薦:
python中 python中的 與
這一部分首先要理解python記憶體機制,python中萬物皆物件。對於不可變物件,改變了原來的值,其別名 變數名 繫結到了新值上面,id肯定會改變 對於可變物件,操作改變了值,id肯定會變,而 是本地操作,其值原地修改 對於 號操作,可變物件和不可變物件呼叫的都是 add 操作 對於 號操作,可變...
python中否定for 在python中否定函式
有沒有一種方法可以否定乙個函式,使它返回負數。在我的函式中,我有條件句,每個條件句都讓這個 烏龜 移動。有沒有一種方法可以否定這一點,所以烏龜的每乙個動作都是否定的。我說的是 狀況 在def ttinterpret program interpret program as a tinyturtle ...
python中雙重迴圈 加速Python中的雙迴圈
有沒有辦法加快從上一次迭代更新其值的雙迴圈?在 中 def calc n,m x 1.0 y 2.0 container np.zeros n,2 for i in range n for j in range m x np.random.gamma 3,1.0 y y 4 y np.random....