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

Python列表排序如何使用key參數(shù)掌控排序規(guī)則

 更新時間:2026年02月21日 08:55:29   作者:傻啦嘿喲  
這篇文章介紹了Python列表排序如何使用key參數(shù)掌控排序規(guī)則,文章討論了sort()和sorted()方法的區(qū)別,以及如何選擇合適的排序工具,最后,通過實戰(zhàn)案例展示了key參數(shù)的靈活應(yīng)用,感興趣的朋友跟隨小編一起看看吧

在Python編程中,列表排序是高頻操作。無論是處理用戶輸入的數(shù)據(jù)、分析日志文件,還是實現(xiàn)算法邏輯,排序都能讓數(shù)據(jù)更有序、更易處理。但當(dāng)列表包含混合類型元素,或需要按特定規(guī)則排序時,直接調(diào)用sort()sorted()可能會報錯或得不到預(yù)期結(jié)果。這時,key參數(shù)就是解決問題的關(guān)鍵——它能自定義排序規(guī)則,讓排序邏輯更靈活。

一、基礎(chǔ)排序:默認(rèn)規(guī)則的局限性

1.1 默認(rèn)排序的“陷阱”

Python的列表排序默認(rèn)按元素自然順序排列。對數(shù)字列表[3, 1, 4, 2],list.sort()sorted()會按數(shù)值大小升序排列;對字符串列表['banana', 'apple', 'cherry'],則按字母順序排列。但若列表包含混合類型,如['oeasy', 123],直接排序會觸發(fā)TypeError,因為Python無法比較字符串和整數(shù)。

lst = ['oeasy', 123]
lst.sort()  # 報錯:TypeError: '<' not supported between instances of 'int' and 'str'

1.2 強制類型轉(zhuǎn)換的“笨辦法”

為解決混合類型排序問題,可先將所有元素轉(zhuǎn)為同一類型(如字符串),再排序。例如:

lst = ['oeasy', 123]
lst.sort(key=str)  # 將所有元素轉(zhuǎn)為字符串后比較
print(lst)  # 輸出:['123', 'oeasy'](因為 '123' < 'oeasy')

但這種方法并非萬能。若嘗試將字符串轉(zhuǎn)為整數(shù)(如['999', '123']轉(zhuǎn)為[999, 123]后排序),對無法轉(zhuǎn)換的字符串(如['oeasy', '123'])會報錯。因此,強制類型轉(zhuǎn)換僅適用于能安全轉(zhuǎn)換的場景。

二、key參數(shù):自定義排序的“魔法棒”

2.1 key參數(shù)的作用原理

key參數(shù)接受一個函數(shù),該函數(shù)會對列表中的每個元素進(jìn)行處理,返回一個用于比較的值。排序時,Python會根據(jù)key函數(shù)返回的值而非元素本身進(jìn)行比較。例如,按字符串長度排序時,key=len會讓Python比較字符串長度而非字母順序。

words = ['apple', 'banana', 'cherry', 'date']
words.sort(key=len)
print(words)  # 輸出:['date', 'apple', 'banana', 'cherry'](長度3 < 5 < 6)

2.2 常見場景:按特定規(guī)則排序

場景1:忽略大小寫排序

默認(rèn)字符串排序區(qū)分大小寫(大寫字母排在小寫字母前)。若需忽略大小寫,可用str.lower作為key函數(shù):

words = ['Banana', 'apple', 'Cherry', 'date']
words.sort(key=str.lower)
print(words)  # 輸出:['apple', 'Banana', 'Cherry', 'date']

場景2:按字典的某個鍵排序

對包含字典的列表,可通過key指定排序依據(jù)的鍵。例如,按字典的'age'鍵升序排序:

data = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 30},
    {'name': 'Charlie', 'age': 20}
]
sorted_data = sorted(data, key=lambda x: x['age'])
print(sorted_data)
# 輸出:[{'name': 'Charlie', 'age': 20}, {'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}]

場景3:按多條件排序

若需先按一個條件排序,再按另一個條件排序,可讓key函數(shù)返回元組。例如,先按年齡升序,再按姓名字母順序排序:

data = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 30},
    {'name': 'Charlie', 'age': 25}
]
sorted_data = sorted(data, key=lambda x: (x['age'], x['name']))
print(sorted_data)
# 輸出:[{'name': 'Alice', 'age': 25}, {'name': 'Charlie', 'age': 25}, {'name': 'Bob', 'age': 30}]

場景4:按對象屬性排序

對自定義類的對象列表,可通過key指定排序依據(jù)的屬性。例如:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __repr__(self):
        return f"{self.name}({self.age})"
people = [Person('Alice', 25), Person('Bob', 22), Person('Charlie', 24)]
sorted_people = sorted(people, key=lambda p: p.age)
print(sorted_people)  # 輸出:[Bob(22), Charlie(24), Alice(25)]

2.3 高級技巧:自定義函數(shù)與operator模塊

自定義函數(shù)作為key

若排序邏輯復(fù)雜,可定義獨立函數(shù)作為key。例如,按字典的'age'鍵加權(quán)排序:

def custom_key(item):
    return item['age'] * 2 + len(item['name'])  # 年齡乘2加姓名長度

data = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 30},
    {'name': 'Charlie', 'age': 20}
]
sorted_data = sorted(data, key=custom_key)
print(sorted_data)
# 輸出:[{'name': 'Charlie', 'age': 20}, {'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}]

使用operator模塊

Python的operator模塊提供了itemgetterattrgetter函數(shù),可簡化key函數(shù)的編寫。例如,按字典的'score'鍵排序:

import operator
data = [
    {'name': 'Alice', 'score': 88},
    {'name': 'Bob', 'score': 92},
    {'name': 'Charlie', 'score': 85}
]
sorted_data = sorted(data, key=operator.itemgetter('score'))
print(sorted_data)
# 輸出:[{'name': 'Charlie', 'score': 85}, {'name': 'Alice', 'score': 88}, {'name': 'Bob', 'score': 92}]

對對象列表,可用attrgetter按屬性排序:

import operator
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __repr__(self):
        return f"{self.name}({self.age})"
people = [Person('Alice', 25), Person('Bob', 22), Person('Charlie', 24)]
sorted_people = sorted(people, key=operator.attrgetter('age'))
print(sorted_people)  # 輸出:[Bob(22), Charlie(24), Alice(25)]

三、sort()與sorted():選擇合適的排序工具

3.1 原地排序 vs 創(chuàng)建新列表

  • list.sort()是列表方法,直接修改原列表,返回None。適用于無需保留原始順序的場景,如數(shù)據(jù)預(yù)處理。
  • sorted()是內(nèi)置函數(shù),返回新排序列表,原列表不變。適用于需保留原始數(shù)據(jù)的場景,如展示排序結(jié)果后繼續(xù)分析原數(shù)據(jù)。
numbers = [3, 1, 4, 2]
sorted_numbers = sorted(numbers)  # 返回新列表
print(numbers)  # 輸出:[3, 1, 4, 2](原列表未變)
print(sorted_numbers)  # 輸出:[1, 2, 3, 4]
numbers.sort()  # 原地排序
print(numbers)  # 輸出:[1, 2, 3, 4](原列表已變)

3.2 性能與內(nèi)存考慮

  • list.sort()因原地操作,無需創(chuàng)建新列表,內(nèi)存效率更高,適合處理大型列表。
  • sorted()需創(chuàng)建新列表,內(nèi)存開銷略大,但代碼更安全(避免意外修改原數(shù)據(jù))。

四、實戰(zhàn)案例:key參數(shù)的靈活應(yīng)用

案例1:按文件擴展名排序

假設(shè)有一個文件列表,需按擴展名排序:

files = ['document.pdf', 'image.png', 'spreadsheet.xlsx', 'notes.txt']
def get_extension(filename):
    return filename.split('.')[-1]  # 提取擴展名
sorted_files = sorted(files, key=get_extension)
print(sorted_files)
# 輸出:['document.pdf', 'image.png', 'notes.txt', 'spreadsheet.xlsx'](按擴展名字母順序)

案例2:按元組中元素優(yōu)先級排序

對包含元組的列表,需先按第二個元素排序,再按第一個元素排序:

tuples = [('a', 3), ('b', 1), ('c', 2), ('d', 1)]
sorted_tuples = sorted(tuples, key=lambda x: (x[1], x[0]))
print(sorted_tuples)
# 輸出:[('b', 1), ('d', 1), ('c', 2), ('a', 3)](先按第二個元素升序,再按第一個元素字母順序)

案例3:復(fù)雜邏輯排序

假設(shè)需按以下規(guī)則排序:先按字符串長度降序,長度相同則按字母順序升序:

words = ['apple', 'banana', 'cherry', 'date', 'fig']
sorted_words = sorted(words, key=lambda x: (-len(x), x))  # 長度取負(fù)實現(xiàn)降序
print(sorted_words)
# 輸出:['banana', 'cherry', 'apple', 'date', 'fig'](長度6 > 5 > 3,長度5的'apple' < 'cherry')

五、總結(jié):key參數(shù)的“核心價值”

  • 靈活性:通過自定義key函數(shù),可實現(xiàn)任意復(fù)雜的排序邏輯,如按對象屬性、字典鍵、計算結(jié)果等排序。
  • 通用性:適用于list.sort()sorted(),覆蓋原地排序和創(chuàng)建新列表的需求。
  • 可讀性:結(jié)合lambda表達(dá)式或operator模塊,代碼簡潔易讀,避免冗長的比較函數(shù)。

掌握key參數(shù)后,Python列表排序?qū)⒉辉偈芟抻谀J(rèn)規(guī)則。無論是處理混合類型數(shù)據(jù)、多條件排序,還是復(fù)雜邏輯排序,key都能讓排序變得簡單高效。

到此這篇關(guān)于Python列表排序如何使用key參數(shù)掌控排序規(guī)則的文章就介紹到這了,更多相關(guān)Python列表排序key參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python辦公自動化之網(wǎng)絡(luò)監(jiān)控和壓縮文件處理

    Python辦公自動化之網(wǎng)絡(luò)監(jiān)控和壓縮文件處理

    Python辦公?動化是利用Python編程語?來創(chuàng)建腳本和程序,以簡化、加速和?動化?常辦公任務(wù)和工作流程的過程,本文主要介紹了如何進(jìn)行網(wǎng)絡(luò)監(jiān)控和壓縮文件處理,感興趣的可以了解下
    2023-12-12
  • Python中常見的KeyError報錯分析

    Python中常見的KeyError報錯分析

    在Python編程中,KeyError是一種非常常見的異常,它通常發(fā)生在嘗試訪問字典中不存在的鍵時,本文將深入探討KeyError的報錯原因、解決辦法,并通過代碼示例來演示如何避免這一錯誤,需要的朋友可以參考下
    2024-07-07
  • Python 從列表中取值和取索引的方法

    Python 從列表中取值和取索引的方法

    今天小編就為大家分享一篇Python 從列表中取值和取索引的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Django中對通過測試的用戶進(jìn)行限制訪問的方法

    Django中對通過測試的用戶進(jìn)行限制訪問的方法

    這篇文章主要介紹了Django中對通過測試的用戶進(jìn)行限制訪問的方法,Django是眾多Python高人氣web框架中最為著名的一個,需要的朋友可以參考下
    2015-07-07
  • Python人工智能實戰(zhàn)之以圖搜圖的實現(xiàn)

    Python人工智能實戰(zhàn)之以圖搜圖的實現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何基于vgg網(wǎng)絡(luò)和Keras深度學(xué)習(xí)框架實現(xiàn)以圖搜圖功能。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2022-05-05
  • python?playwright?庫上傳和下載操作(自動化測試?playwright)

    python?playwright?庫上傳和下載操作(自動化測試?playwright)

    這篇文章主要介紹了python?playwright?庫上傳和下載操作(自動化測試?playwright?),playwright中的上傳和下載比selenium的上傳和下載要簡便些,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Python3如何日志同時輸出到控制臺和文件

    Python3如何日志同時輸出到控制臺和文件

    這篇文章主要介紹了Python3如何日志同時輸出到控制臺和文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Python如何實時采集Windows CPU\MEMORY\HDD使用率

    Python如何實時采集Windows CPU\MEMORY\HDD使用率

    文章介紹如何通過Python的psutil庫實時獲取系統(tǒng)CPU、內(nèi)存和磁盤使用情況,包括各函數(shù)參數(shù)及返回值,并強調(diào)其在自動化運維中的應(yīng)用價值
    2025-08-08
  • Python利用AutoGrad實現(xiàn)自動計算函數(shù)斜率和梯度

    Python利用AutoGrad實現(xiàn)自動計算函數(shù)斜率和梯度

    AutoGrad 是一個老少皆宜的 Python 梯度計算模塊。對于大學(xué)生、機器學(xué)習(xí)愛好者而言,你只需要傳遞給它Numpy這樣的標(biāo)準(zhǔn)數(shù)據(jù)庫下編寫的損失函數(shù),它就可以自動計算損失函數(shù)的導(dǎo)數(shù)(梯度)。本文將從普通斜率計算開始,介紹到如何只使用它來實現(xiàn)一個邏輯回歸模型
    2022-07-07
  • Kotlin 中的 apply 函數(shù)用法詳解

    Kotlin 中的 apply 函數(shù)用法詳解

    apply 函數(shù)是 Kotlin 中一個十分方便的工具,它使得對對象進(jìn)行初始化和配置變得更加簡潔、清晰,通過與 Java 的對比,我們可以看出 Kotlin 在處理類似情況時具有更高的表現(xiàn)力和簡潔性,本文給大家介紹Kotlin apply 函數(shù)的用法,感興趣的朋友一起看看吧
    2024-03-03

最新評論

修武县| 兴海县| 延吉市| 集安市| 孝昌县| 尼勒克县| 海晏县| 栖霞市| 高要市| 巨鹿县| 龙江县| 七台河市| 星子县| 革吉县| 秦皇岛市| 彰化市| 宝兴县| 东兰县| 汶上县| 伊金霍洛旗| 晋宁县| 西畴县| 吴江市| 滦南县| 西华县| 浦东新区| 阿图什市| 饶河县| 方城县| 壶关县| 乐清市| 临泉县| 安岳县| 马边| 时尚| 靖安县| 嘉禾县| 阿拉尔市| 抚顺市| 松原市| 抚宁县|