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

詳解Python3中的自定義排序

 更新時(shí)間:2025年01月24日 08:17:29   作者:傻啦嘿喲  
在Python編程中,排序是一項(xiàng)常見的操作,Python提供了強(qiáng)大的排序功能,本文將通過詳細(xì)的方法和示例講解如何在Python3中實(shí)現(xiàn)自定義排序,需要的可以了解下

在Python編程中,排序是一項(xiàng)常見的操作。Python提供了強(qiáng)大的排序功能,通過sorted()函數(shù)和列表的sort()方法,可以方便地對列表進(jìn)行排序。這兩個(gè)方法都支持key參數(shù),允許開發(fā)者自定義排序規(guī)則。本文將通過詳細(xì)的方法和示例,講解如何在Python3中實(shí)現(xiàn)自定義排序。

一、基礎(chǔ)排序

Python的sorted()函數(shù)返回一個(gè)新的列表,而列表的sort()方法則直接對原列表進(jìn)行排序,不返回任何值(返回值為None)。

# 基礎(chǔ)示例
numbers = [5, 2, 9, 1, 5, 6]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # 輸出: [1, 2, 5, 5, 6, 9]
#使用sort()方法:
 
python
numbers = [5, 2, 9, 1, 5, 6]
numbers.sort()
print(numbers)  # 輸出: [1, 2, 5, 5, 6, 9]

二、自定義排序規(guī)則

通過key參數(shù),可以自定義排序規(guī)則。key參數(shù)接收一個(gè)函數(shù),該函數(shù)會接收列表中的每一個(gè)元素作為參數(shù),并返回一個(gè)值作為該元素的排序優(yōu)先級。

2.1 按字符串長度排序

words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=len)
print(sorted_words)  # 輸出: ['date', 'apple', 'banana', 'cherry']

2.2 按元組的第二個(gè)元素排序

pairs = [(1, 3), (4, 1), (2, 5), (3, 2)]
sorted_pairs = sorted(pairs, key=lambda x: x[1])
print(sorted_pairs)  # 輸出: [(4, 1), (3, 2), (1, 3), (2, 5)]

2.3 降序排序

通過reverse=True參數(shù),可以實(shí)現(xiàn)降序排序。

numbers = [5, 2, 9, 1, 5, 6]
sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc)  # 輸出: [9, 6, 5, 5, 2, 1]

使用sort()方法時(shí)也可以指定reverse=True:

numbers = [5, 2, 9, 1, 5, 6]
numbers.sort(reverse=True)
print(numbers)  # 輸出: [9, 6, 5, 5, 2, 1]

2.4 多條件排序

有時(shí)需要根據(jù)多個(gè)條件進(jìn)行排序,例如先按一個(gè)字段排序,再按另一個(gè)字段排序。

people = [('Alice', 25), ('Bob', 30), ('Alice', 22)]
sorted_people = sorted(people, key=lambda x: (x[0], x[1]))
print(sorted_people)  # 輸出: [('Alice', 22), ('Alice', 25), ('Bob', 30)]

三、使用lambda表達(dá)式定義復(fù)雜排序規(guī)則

lambda表達(dá)式可以用于定義更復(fù)雜的排序規(guī)則。

3.1 按字典值排序

people = {"Alice": 30, "Bob": 25, "Charlie": 35}
sorted_people = sorted(people.items(), key=lambda x: x[1])
print(sorted_people)  # 輸出: [('Bob', 25), ('Alice', 30), ('Charlie', 35)]

3.2 對類對象排序

可以創(chuàng)建一個(gè)類,并根據(jù)類的屬性對對象進(jìn)行排序。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __repr__(self):
        return f"Person{name=self.name, age=self.age}"
 
# 創(chuàng)建Person對象
people = [Person("Alice", 30), Person("Bob", 25), Person("Charlie", 35)]
# 按年齡排序
sorted_people = sorted(people, key=lambda person: person.age)
for person in sorted_people:
    print(person)
# 輸出: Person{name='Bob', age=25}, Person{name='Alice', age=30}, Person{name='Charlie', age=35}

四、使用functools.cmp_to_key進(jìn)行傳統(tǒng)比較

當(dāng)需要使用傳統(tǒng)的比較函數(shù)(cmp函數(shù))時(shí),可以使用functools.cmp_to_key進(jìn)行轉(zhuǎn)換。

from functools import cmp_to_key
 
# 自定義比較函數(shù)
def compare(a, b):
    if a % 2 == b % 2:
        return a - b  # 相同類型(奇偶性)按大小排序
    return -1 if a % 2 == 0 else 1  # 偶數(shù)優(yōu)先
 
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
sorted_numbers = sorted(numbers, key=cmp_to_key(compare))
print(sorted_numbers)  # 輸出: [2, 4, 6, 8, 1, 3, 5, 7]

五、復(fù)雜數(shù)據(jù)結(jié)構(gòu)排序示例

假設(shè)有一個(gè)包含列車信息的列表,需要根據(jù)“二等座”是否有票以及“歷時(shí)”進(jìn)行排序。

tickets = [
    {'車次': 'G1', '歷時(shí)': "1:23", '二等座': "有"},
    {'車次': 'G2', '歷時(shí)': "1:00", '二等座': "有"},
    {'車次': 'G3', '歷時(shí)': "0:23", '二等座': "13"},
    {'車次': 'G4', '歷時(shí)': "1:55", '二等座': "44"},
    {'車次': 'G5', '歷時(shí)': "0:21", '二等座': "13"},
    {'車次': 'G6', '歷時(shí)': "1:55", '二等座': "44"}
]
 
# 定義比較函數(shù)
def cmp_seat(t1, t2):
    if t1["二等座"] == "有":
        if t2["二等座"] == "有":
            return 0
        else:
            return -1
    else:
        if t2["二等座"] == "有":
            return 1
        else:
            return int(t2["二等座"]) - int(t1["二等座"])
 
def cmp_time(t1, t2):
    hs1 = t1["歷時(shí)"].split(":")
    hs2 = t2["歷時(shí)"].split(":")
    tm1 = int(hs1[0]) * 60 + int(hs1[1])
    tm2 = int(hs2[0]) * 60 + int(hs2[1])
    return tm1 - tm2
 
def cmp(t1, t2):
    if cmp_seat(t1, t2) != 0:
        return cmp_seat(t1, t2)
    else:
        return cmp_time(t1, t2)
 
# 使用cmp_to_key進(jìn)行排序
tickets.sort(key=cmp_to_key(cmp))
for ticket in tickets:
    print(ticket)

在這個(gè)例子中,cmp_seat函數(shù)用于比較“二等座”是否有票,cmp_time函數(shù)用于比較“歷時(shí)”,cmp函數(shù)則綜合這兩個(gè)條件進(jìn)行比較。最終通過tickets.sort(key=cmp_to_key(cmp))實(shí)現(xiàn)排序。

六、總結(jié)

Python的自定義排序功能非常強(qiáng)大,通過key參數(shù)和functools.cmp_to_key,可以靈活地定義排序規(guī)則。無論是簡單的數(shù)據(jù)類型(如整數(shù)和字符串),還是復(fù)雜的對象,都可以輕松實(shí)現(xiàn)自定義排序。掌握自定義排序,可以大大增強(qiáng)對數(shù)據(jù)的處理能力,為數(shù)據(jù)分析和處理提供更強(qiáng)大的支持。

通過本文的示例,希望讀者能夠深刻理解Python自定義排序的用法,并在實(shí)際編程中靈活運(yùn)用。自定義排序不僅限于上述示例,開發(fā)者可以根據(jù)實(shí)際需求,設(shè)計(jì)出更加復(fù)雜和高效的排序規(guī)則。

到此這篇關(guān)于詳解Python3中的自定義排序的文章就介紹到這了,更多相關(guān)Python3自定義排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python使用itchat實(shí)現(xiàn)手機(jī)控制電腦

    python使用itchat實(shí)現(xiàn)手機(jī)控制電腦

    這篇文章主要為大家詳細(xì)介紹了python使用itchat實(shí)現(xiàn)手機(jī)控制電腦,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Python深度學(xué)習(xí)pytorch神經(jīng)網(wǎng)絡(luò)塊的網(wǎng)絡(luò)之VGG

    Python深度學(xué)習(xí)pytorch神經(jīng)網(wǎng)絡(luò)塊的網(wǎng)絡(luò)之VGG

    雖然AlexNet證明深層神經(jīng)網(wǎng)絡(luò)卓有成效,但它沒有提供一個(gè)通用的模板來指導(dǎo)后續(xù)的研究人員設(shè)計(jì)新的網(wǎng)絡(luò)。下面,我們將介紹一些常用于設(shè)計(jì)深層神經(jīng)網(wǎng)絡(luò)的啟發(fā)式概念
    2021-10-10
  • Python基礎(chǔ)教程之異常詳解

    Python基礎(chǔ)教程之異常詳解

    調(diào)試Python程序時(shí),經(jīng)常會報(bào)出一些異常,下面這篇文章就來給大家介紹了關(guān)于Python基礎(chǔ)教程之異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2019-01-01
  • Python中time.sleep(0.001)是否真的只等待1毫秒

    Python中time.sleep(0.001)是否真的只等待1毫秒

    這篇文章主要介紹了Python中time.sleep(0.001)是否真的只等待1毫秒,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python實(shí)現(xiàn)Mysql數(shù)據(jù)庫連接池實(shí)例詳解

    Python實(shí)現(xiàn)Mysql數(shù)據(jù)庫連接池實(shí)例詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)Mysql數(shù)據(jù)庫連接池實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Python實(shí)現(xiàn)的下載8000首兒歌的代碼分享

    Python實(shí)現(xiàn)的下載8000首兒歌的代碼分享

    這篇文章主要介紹了Python實(shí)現(xiàn)的下載8000首兒歌的代碼分享,本文直接給出實(shí)現(xiàn)代碼,下載的是有伴網(wǎng)的資源,需要的朋友可以參考下
    2014-11-11
  • python exit出錯原因整理

    python exit出錯原因整理

    這篇文章主要介紹了python exit出錯原因整理,有需要的朋友們可以跟著參考學(xué)習(xí)下。
    2020-08-08
  • python基礎(chǔ)字符串str詳解

    python基礎(chǔ)字符串str詳解

    大家好,本篇文章主要講的是python基礎(chǔ)字符串str詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Python+Ollama零成本打造一個(gè)私有AI助手

    Python+Ollama零成本打造一個(gè)私有AI助手

    零?API?費(fèi)用、零數(shù)據(jù)泄露風(fēng)險(xiǎn)、完全離線可用,本文將帶大家從安裝到實(shí)戰(zhàn),詳細(xì)介紹一下如何使用Python結(jié)合Ollama模型30?分鐘跑起一個(gè)本地?AI?助手,感興趣的小伙伴可以了解下
    2026-04-04
  • Django自定義過濾器定義與用法示例

    Django自定義過濾器定義與用法示例

    這篇文章主要介紹了Django自定義過濾器定義與用法,結(jié)合實(shí)例形式分析了Django自定義過濾器的概念、功能、定義及使用方法,需要的朋友可以參考下
    2018-03-03

最新評論

荣昌县| 涿鹿县| 延川县| 长沙市| 封丘县| 体育| 淮滨县| 日土县| 门头沟区| 安仁县| 盘山县| 林西县| 五河县| 化州市| 阜康市| 高邮市| 呼玛县| 韶关市| 东至县| 龙海市| 晋江市| 饶河县| 行唐县| 大方县| 玛纳斯县| 东乌| 万州区| 双鸭山市| 城步| 寻乌县| 昌黎县| 黎川县| 前郭尔| 邹城市| 抚远县| 伊宁县| 石楼县| 奉化市| 陆丰市| 钟山县| 绍兴市|