Python sort 自定義函數(shù)排序問題
Python sort 自定義函數(shù)排序
sort()
函數(shù)用于對(duì)原列表進(jìn)行排序,如果指定參數(shù),則使用比較函數(shù)指定的比較函數(shù)。
sort()
方法語法:
list.sort( key=None, reverse=False)
參數(shù)
- key – 主要是用來進(jìn)行比較的元素,只有一個(gè)參數(shù),具體的函數(shù)的參數(shù)就是取自于可迭代對(duì)象中,指定可迭代對(duì)象中的一個(gè)元素來進(jìn)行排序。
- reverse – 排序規(guī)則,
reverse = True
降序,reverse = False
升序(默認(rèn))。
以下實(shí)例演示了通過指定列表中的元素排序來輸出列表:指定第二個(gè)元進(jìn)行素排序
def take_second(elem): return elem[1] random = [(2, 2), (3, 4), (5, 6), (1, 5), (6, 3)] random.sort(key=take_second) print(random) # [(2, 2), (6, 3), (3, 4), (1, 5), (5, 6)]
自定義Python排序函數(shù)比較方式
當(dāng)你想按自己的方式對(duì)數(shù)組元素進(jìn)行排序時(shí),我們需要自定義比較函數(shù)實(shí)現(xiàn)我們想實(shí)現(xiàn)的排序方式。
例1
以降序?qū)?shù)組進(jìn)行排序
>>> def comp(x,y): ... return y-x ... >>> a = [1,8,4,5,2,7] >>> a.sort(comp) >>> a [8, 7, 5, 4, 2, 1]
例2
class Interval(object): def __init__(self, s=0, e=0): self.start = s self.end = e intervals = [] tmp = [[1,3],[15,18],[8,10],[2,6]] for l in tmp: t = Interval(l[0],l[1]) intervals.append(t) def printInterval(inter): print("[{}, {}]".format(inter.start,inter.end)) for l in intervals: printInterval(l) # [[1,3],[15,18],[8,10],[2,6]] def comp(it1, it2): return it1.start-it2.start intervals.sort(comp) for l in intervals: printInterval(l) # [[1,3],[2,6],[8,10],[15,18]]
以上方法皆是python2的實(shí)現(xiàn)。python3下實(shí)現(xiàn)有所不同(以上方法python3下跑不通),因?yàn)閜ython3 sorted取消了對(duì)cmp的支持,即python3沒有cmp函數(shù)。
例2的python3實(shí)現(xiàn)
class Interval(object): def __init__(self, s=0, e=0): self.start = s self.end = e intervals = [] tmp = [[1,3],[15,18],[8,10],[2,6]] for l in tmp: t = Interval(l[0],l[1]) intervals.append(t) def printInterval(inter): print("[{}, {}]".format(inter.start,inter.end)) for l in intervals: printInterval(l) def comp(it1): return it1.start intervals.sort(key=comp) # sorted(intervals,key=comp) for l in intervals: printInterval(l)
在python3中,待比較元素x通過custom_key函數(shù)轉(zhuǎn)化為Python能比較的值custom_key(x),進(jìn)而再基于返回值進(jìn)行排序。
python3 比較第二種方式
如果想和python2中一樣定義比較函數(shù),可以通過functools庫中的cmp_to_key()函數(shù)將比較函數(shù)(comparison function)轉(zhuǎn)化為關(guān)鍵字函數(shù)(key function)。
functools.cmp_to_key(func)函數(shù)將比較函數(shù)轉(zhuǎn)化為關(guān)鍵字函數(shù),與接受key function 的工具一同使用(如 sorted(), min(), max())。
from functools import cmp_to_key as ctk class Interval(object): def __init__(self, s=0, e=0): self.start = s self.end = e intervals = [] tmp = [[1,3],[15,18],[8,10],[2,6]] for l in tmp: t = Interval(l[0],l[1]) intervals.append(t) def printInterval(inter): print("[{}, {}]".format(inter.start,inter.end)) for l in intervals: printInterval(l) """ Please note here. """ def comp(it1,it2): return it1.start-it2.start intervals.sort(key=ctk(comp)) # sorted(intervals,key=comp) for l in intervals: printInterval(l)
最后得到的結(jié)果和上面的代碼是一樣的。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 詳解Python?NumPy如何使用argsort方法進(jìn)行排序
- python3中sort和sorted使用與區(qū)別
- Python高級(jí)排序sort()函數(shù)使用技巧實(shí)例探索
- Python中sorted()函數(shù)的強(qiáng)大排序技術(shù)實(shí)例探索
- Python中的sorted函數(shù)應(yīng)用及文件操作詳解
- Python中的sorted函數(shù)使用解析
- Python排序方法中sort和sorted的區(qū)別詳解
- Python 列表 sort()函數(shù)使用實(shí)例詳解
- Python中sort函數(shù)正則表達(dá)式的使用
相關(guān)文章
Python實(shí)戰(zhàn)之實(shí)現(xiàn)百度智能圖片識(shí)別
這篇文章主要介紹了如何利用Python編寫一個(gè)百度智能圖片識(shí)別項(xiàng)目,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-01-01Python?實(shí)現(xiàn)一個(gè)全連接的神經(jīng)網(wǎng)絡(luò)
這篇文章主要介紹了Python?實(shí)現(xiàn)一個(gè)全連接的神經(jīng)網(wǎng)絡(luò),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06Python實(shí)現(xiàn)檢索指定網(wǎng)段內(nèi)所有的數(shù)據(jù)庫服務(wù)器
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)檢索指定網(wǎng)段內(nèi)所有的數(shù)據(jù)庫服務(wù)器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-02-02NDArray 與 numpy.ndarray 互相轉(zhuǎn)換方式
這篇文章主要介紹了NDArray 與 numpy.ndarray 互相轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05python實(shí)現(xiàn)將m3u8視頻轉(zhuǎn)換成mp4的操作步驟
m3u8 是一種基于文本的媒體播放列表文件格式,通常用于指定流媒體播放器播放在線媒體流,MP4是一種基于MPEG-4 Part 12(2015)和MPEG-4 Part 14標(biāo)準(zhǔn)的數(shù)字多媒體容器格式,本文將給大家介紹python實(shí)現(xiàn)將m3u8視頻轉(zhuǎn)換成mp4的操作步驟,需要的朋友可以參考下2024-05-05Python計(jì)算兩個(gè)矩形重合面積代碼實(shí)例
這篇文章主要介紹了Python 實(shí)現(xiàn)兩個(gè)矩形重合面積代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09