最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

sort() 函數(shù)用于對(duì)原列表進(jìn)行排序,如果指定參數(shù),則使用比較函數(shù)指定的比較函數(shù)。

sort() 方法語(yǔ)法:

list.sort( key=None, reverse=False)

參數(shù)

  • key – 主要是用來(lái)進(jìn)行比較的元素,只有一個(gè)參數(shù),具體的函數(shù)的參數(shù)就是取自于可迭代對(duì)象中,指定可迭代對(duì)象中的一個(gè)元素來(lái)進(jìn)行排序。
  • reverse – 排序規(guī)則, reverse = True 降序, reverse = False 升序(默認(rèn))。

以下實(shí)例演示了通過(guò)指定列表中的元素排序來(lái)輸出列表:指定第二個(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沒(méi)有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通過(guò)custom_key函數(shù)轉(zhuǎn)化為Python能比較的值custom_key(x),進(jìn)而再基于返回值進(jìn)行排序。

python3 比較第二種方式

如果想和python2中一樣定義比較函數(shù),可以通過(guò)functools庫(kù)中的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 Tkinter實(shí)例——模擬擲骰子

    Python Tkinter實(shí)例——模擬擲骰子

    這篇文章主要介紹了Python利用tkinter模塊模擬擲骰子的實(shí)例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-10-10
  • Python字符串特性及常用字符串方法的簡(jiǎn)單筆記

    Python字符串特性及常用字符串方法的簡(jiǎn)單筆記

    這篇文章主要介紹了Python字符串特性及常見(jiàn)字符串方法的簡(jiǎn)單筆記,為一些Pyhton入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-01-01
  • python壓包的概念及實(shí)例詳解

    python壓包的概念及實(shí)例詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python壓包的概念及實(shí)例詳解內(nèi)容,有興趣的朋友們可以參考學(xué)習(xí)下。
    2021-02-02
  • 教你用python實(shí)現(xiàn)12306余票查詢

    教你用python實(shí)現(xiàn)12306余票查詢

    今天就和大家一起來(lái)討論一下python實(shí)現(xiàn)12306余票查詢(pycharm+python3.7),一起來(lái)感受一下python爬蟲的簡(jiǎn)單實(shí)踐,需要的朋友可以參考下
    2021-06-06
  • pyqt5 QScrollArea設(shè)置在自定義側(cè)(任何位置)

    pyqt5 QScrollArea設(shè)置在自定義側(cè)(任何位置)

    這篇文章主要介紹了pyqt5 QScrollArea設(shè)置在自定義側(cè)(任何位置),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 使用python實(shí)現(xiàn)BLAST

    使用python實(shí)現(xiàn)BLAST

    最近在自學(xué)python,又用python實(shí)現(xiàn)了一下BLAST。 這次更新了打分函數(shù)如下,空位罰分改為-5,但不區(qū)分gap open 和 gap extend。
    2018-02-02
  • Django密碼存儲(chǔ)策略分析

    Django密碼存儲(chǔ)策略分析

    這篇文章主要介紹了Django密碼存儲(chǔ)策略分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 夯實(shí)基礎(chǔ)python集合的應(yīng)用場(chǎng)景及字符串定義和表示

    夯實(shí)基礎(chǔ)python集合的應(yīng)用場(chǎng)景及字符串定義和表示

    這篇文章主要為大家介紹了python集合的應(yīng)用場(chǎng)景及字符串定義和表示,來(lái)幫大家夯實(shí)基礎(chǔ),有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-10-10
  • python并發(fā)編程 Process對(duì)象的其他屬性方法join方法詳解

    python并發(fā)編程 Process對(duì)象的其他屬性方法join方法詳解

    這篇文章主要介紹了python并發(fā)編程 Process對(duì)象的其他屬性方法join方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python中使用psutil查看內(nèi)存占用的情況

    python中使用psutil查看內(nèi)存占用的情況

    今天小編就為大家分享一篇python中使用psutil查看內(nèi)存占用的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06

最新評(píng)論

苏州市| 五寨县| 德惠市| 烟台市| 淳化县| 临夏县| 武川县| 库伦旗| 常宁市| 宁阳县| 九寨沟县| 米脂县| 桃源县| 平乐县| 汕尾市| 宝鸡市| 浦东新区| 昆山市| 五指山市| 拜城县| 宜黄县| 崇信县| 兴隆县| 常州市| 建始县| 象山县| 千阳县| 静乐县| 宣城市| 昭觉县| 衡阳市| 铅山县| 宾阳县| 图片| 陵川县| 新泰市| 开原市| 上思县| 澄江县| 福海县| 理塘县|