欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python sort 自定義函數(shù)排序問題

 更新時(shí)間:2023年09月12日 09:17:39   作者:世界盡頭與你  
這篇文章主要介紹了Python sort 自定義函數(shù)排序問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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è)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實(shí)戰(zhàn)之實(shí)現(xiàn)百度智能圖片識(shí)別

    Python實(shí)戰(zhàn)之實(shí)現(xiàn)百度智能圖片識(shí)別

    這篇文章主要介紹了如何利用Python編寫一個(gè)百度智能圖片識(shí)別項(xiàng)目,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-01-01
  • 實(shí)例詳解Python模塊decimal

    實(shí)例詳解Python模塊decimal

    這篇文章主要介紹了Python模塊decimal ,Python提供了decimal模塊用于十進(jìn)制數(shù)學(xué)計(jì)算,它具有以下特點(diǎn)在文中給大家詳細(xì)介紹,需要的朋友可以參考下
    2019-06-06
  • Python?實(shí)現(xiàn)一個(gè)全連接的神經(jīng)網(wǎng)絡(luò)

    Python?實(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-06
  • python實(shí)現(xiàn)電子詞典

    python實(shí)現(xiàn)電子詞典

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)電子詞典的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python實(shí)現(xiàn)檢索指定網(wǎng)段內(nèi)所有的數(shù)據(jù)庫服務(wù)器

    Python實(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-02
  • NDArray 與 numpy.ndarray 互相轉(zhuǎn)換方式

    NDArray 與 numpy.ndarray 互相轉(zhuǎn)換方式

    這篇文章主要介紹了NDArray 與 numpy.ndarray 互相轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python命令行安裝包詳解

    python命令行安裝包詳解

    這篇文章主要介紹了python命令行安裝包的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • python實(shí)現(xiàn)將m3u8視頻轉(zhuǎn)換成mp4的操作步驟

    python實(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-05
  • python命令行工具Click快速掌握

    python命令行工具Click快速掌握

    這篇文章主要介紹了python命令行工具Click快速掌握,寫 Python 的經(jīng)常要寫一些命令行工具,雖然標(biāo)準(zhǔn)庫提供有命令行解析工具 Argparse,但是寫起來非常麻煩,我很少會(huì)使用它。命令行工具中用起來最爽的就是 Click,,需要的朋友可以參考下
    2019-07-07
  • Python計(jì)算兩個(gè)矩形重合面積代碼實(shí)例

    Python計(jì)算兩個(gè)矩形重合面積代碼實(shí)例

    這篇文章主要介紹了Python 實(shí)現(xiàn)兩個(gè)矩形重合面積代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論