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

Python中的sort()和sorted()用法示例解析

 更新時間:2025年08月12日 15:27:50   作者:AI手記叨叨  
本文給大家介紹Python中l(wèi)ist.sort()和sorted()的使用區(qū)別,詳細介紹其參數(shù)功能及Timsort排序算法特性,涵蓋自適應(yīng)性、穩(wěn)定性、時間復雜度,并提及該算法在Java、JavaScript等多語言中的應(yīng)用,感興趣的朋友跟隨小編一起看看吧

一、list.sort()

sort()是列表(list)的內(nèi)置方法,直接對原列表進行排序(原地排序),不返回新列表

參數(shù)說明

key(可選):指定一個函數(shù)(內(nèi)置或自定義),用于從每個元素中提取比較鍵(如 key=str.lower)。
reverse(可選):布爾值,True 表示降序,F(xiàn)alse 表示升序(默認)。

常用內(nèi)置函數(shù)

abs(x):按絕對值排序(適用于數(shù)字)。
len(x):按長度排序(適用于字符串、列表等)。
str.lower(x) 或 str.upper(x):忽略大小寫排序(適用于字符串)。
int(x) 或 float(x):轉(zhuǎn)換為數(shù)值后排序(適用于字符串數(shù)字)。
ord(x):按字符的 ASCII 碼排序(適用于單個字符)。

基本用法示例

numbers = [3, 1, 4, 1, 5, 9, 2]
# 升序排序(默認)
numbers.sort()
print(numbers)  
# [1, 1, 2, 3, 4, 5, 9]
# 降序排序
numbers.sort(reverse=True)
print(numbers) 
# [9, 5, 4, 3, 2, 1, 1]
# 按絕對值排序
numbers = [-3, 1, -4, 2]
numbers.sort(key=abs)
print(numbers)  
# [1, 2, -3, -4]

自定義函數(shù)示例

# 返回元組的第 2 個元素
def get_second_element(item):
    return item[1]  
data = [("Alice", 25), ("Bob", 20), ("Jack", 30)]
data.sort(key=get_second_element)  # 按年齡排序
print(data)
# [('Bob', 20), ('Alice', 25), ('Jack', 30)]

lambda表達式示例

lambda是一種匿名函數(shù),適用于簡單的key邏輯

# 按字符串的最后一個字符排序
words = ["apple", "banana", "cherry"]
words.sort(key=lambda x: x[-1]) 
print(words)
# ['banana', 'apple', 'cherry']

operator模塊的函數(shù)示例

operator 模塊提供了一些高效的 key 函數(shù):
operator.itemgetter(n):獲取可迭代對象的第 n 個元素(適用于元組、字典等)。
operator.attrgetter(‘attr’):獲取對象的屬性(適用于類實例)。

from operator import itemgetter
data = [("Alice", 25), ("Bob", 20), ("Jack", 30)]
# 按年齡排序(等同于 lambda x: x[1])
data.sort(key=itemgetter(1))
print(data)
# [('Bob', 20), ('Alice', 25), ('Jack', 30)]

二、sorted()函數(shù)

sorted()是Python內(nèi)置函數(shù),對所有可迭代對象(如列表、元組、字典等)進行排序,返回一個新列表,原對象不變。

參數(shù)說明

iterable:要排序的可迭代對象(如列表、元組、字符串等)。
key(可選):同 sort(),指定比較鍵。
reverse(可選):同 sort(),控制排序順序。

基本用法示例

# 對列表排序
numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
# [1, 1, 3, 4, 5]
# 對字符串排序(按字符的 ASCII 碼)
word = "python"
sorted_word = sorted(word)
print(sorted_word)
# ['h', 'n', 'o', 'p', 't', 'y']
# 對元組排序
data = (("Alice", 25), ("Bob", 20), ("Jack", 30))
sorted_data = sorted(data, key=lambda x: x[1])  # 按年齡排序
print(sorted_data)
# [('Bob', 20), ('Alice', 25), ('Jack', 30)]

按自定義規(guī)則排序示例

words = ["banana", "watermelon", "apple"]
# 按單詞長度排序
sorted_words = sorted(words, key=len)
print(sorted_words)
# ['apple', 'banana', 'watermelon']

多級排序示例

people = [("Alice", 25), ("Bob", 20), ("Charlie", 25)]
# 先按年齡升序,再按姓名降序
sorted_people = sorted(people, key=lambda x: (x[1], -ord(x[0][0])))
print(sorted_people)
# [('Bob', 20), ('Charlie', 25), ('Alice', 25)]

對字典的鍵或值排序

scores = {"Alice": 90, "Charlie": 75, "Bob": 85}
# 按鍵排序
sorted_by_name = sorted(scores.items())
print(sorted_by_name)
# [('Alice', 90), ('Bob', 85), ('Charlie', 75)]
# 按值排序
sorted_by_score = sorted(scores.items(), key=lambda x: x[1])
print(sorted_by_score)
# [('Charlie', 75), ('Bob', 85), ('Alice', 90)]

三、sort和sorted的排序算法

list.sort()和sorted()函數(shù)使用的排序算法是Timsort,這是一種混合、穩(wěn)定的排序算法,結(jié)合了歸并排序(Merge Sort) 和 插入排序(Insertion Sort)的優(yōu)點,并且效率極高。

Timsort 的核心原理

自適應(yīng)排序
Timsort 根據(jù)輸入數(shù)據(jù)的特點自適應(yīng)地選擇排序策略:

  • 對小規(guī)模數(shù)據(jù)(通常是 <=64個元素),直接使用插入排序(因為在小數(shù)據(jù)量上插入排序的常數(shù)因子更小,速度更快);
  • 對大規(guī)模數(shù)據(jù),采用歸并排序的分治思想,但會利用數(shù)據(jù)的現(xiàn)有順序(如部分已排序的子序列)。

利用數(shù)據(jù)的自然有序性
Timsort 會掃描數(shù)據(jù),識別并分割已經(jīng)有序的片段(稱為 run),然后通過歸并排序?qū)⑦@些 run 合并。如果數(shù)據(jù)本身有部分有序,Timsort 的效率會顯著高于傳統(tǒng)歸并排序。

穩(wěn)定性
Timsort是穩(wěn)定排序,即相等元素的相對順序在排序后保持不變。這對多關(guān)鍵字排序(如先按年齡排序,再按姓名排序)非常有用。

時間復雜度
最壞情況:O(nlogn)(與歸并排序相同)。
最佳情況:O(n)(當輸入數(shù)據(jù)已有序或接近有序時,利用插入排序優(yōu)化)。
平均情況:O(nlogn)。

Timsort 的好處

實際數(shù)據(jù)友好:現(xiàn)實中的數(shù)據(jù)通常部分有序(如日志按時間接近有序),Timsort 能高效利用這一點。

平衡性能:對于不同規(guī)模和數(shù)據(jù)分布,Timsort 在平均和最壞情況下均表現(xiàn)良好(平均和最壞時間復雜度均為 O(n log n))。

Timsort廣泛應(yīng)用

Java
Arrays.sort() 和 Collections.sort()
JavaScript (V8 引擎)
V8 引擎(Chrome、Node.js)
Swift
標準庫的 sort() 方法
Rust
slice::sort 和 slice::sort_by
Kotlin
sort() 和 sorted() 函數(shù)
C#(部分場景)
Enumerable.OrderBy LINQ 方法

到此這篇關(guān)于Python中的sort()和sorted()用法示例解析的文章就介紹到這了,更多相關(guān)python sort()和sorted()用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python邏輯運算符詳解與實際應(yīng)用指南

    Python邏輯運算符詳解與實際應(yīng)用指南

    這篇文章主要介紹了Python邏輯運算符詳解與實際應(yīng)用指南的相關(guān)資料,包括真值表、短路求值特性、運算符優(yōu)先級及非布爾類型的處理,還提供了實際應(yīng)用案例和注意事項,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-04-04
  • Python中正則表達式對單個字符,多個字符和匹配邊界等使用

    Python中正則表達式對單個字符,多個字符和匹配邊界等使用

    這篇文章主要介紹了Python中正則表達式對單個字符,多個字符和匹配邊界等使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Python圖形繪制操作之正弦曲線實現(xiàn)方法分析

    Python圖形繪制操作之正弦曲線實現(xiàn)方法分析

    這篇文章主要介紹了Python圖形繪制操作之正弦曲線實現(xiàn)方法,涉及Python使用numpy模塊數(shù)值運算及matplotlib.pyplot模塊進行圖形繪制的相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • Python實現(xiàn)多個Word文檔合并

    Python實現(xiàn)多個Word文檔合并

    在Python中,可以使用Python-docx庫來操作Word文檔,所以下面小編就為大家介紹一下如何利用Python-docx實現(xiàn)多個Word文檔合并功能吧,需要的可以參考一下
    2023-06-06
  • 利用Python獲取操作系統(tǒng)信息實例

    利用Python獲取操作系統(tǒng)信息實例

    作為一個運維人員,經(jīng)常需要獲取系統(tǒng)的的各種信息,使用python會很方便幫助獲得,這篇文章運用實例告訴大家如何利用Python來獲取操作系統(tǒng)的信息,有需要的可以參考借鑒。
    2016-09-09
  • Python面向?qū)ο箢惥帉懠毠?jié)分析【類,方法,繼承,超類,接口等】

    Python面向?qū)ο箢惥帉懠毠?jié)分析【類,方法,繼承,超類,接口等】

    這篇文章主要介紹了Python面向?qū)ο箢惥帉懠毠?jié),較為詳細的分析了Python面向?qū)ο蟪绦蛟O(shè)計中類,方法,繼承,超類,接口等相關(guān)概念、使用技巧與注意事項,需要的朋友可以參考下
    2019-01-01
  • Python實現(xiàn)UDP與TCP通信的示例詳解

    Python實現(xiàn)UDP與TCP通信的示例詳解

    UDP是一種無連接的、不可靠的傳輸協(xié)議;TCP是一種可靠的、面向連接的傳輸協(xié)議。這篇文章主要介紹了Python實現(xiàn)UDP與TCP通信的方法,需要的可以參考一下
    2023-03-03
  • Django1.9 加載通過ImageField上傳的圖片方法

    Django1.9 加載通過ImageField上傳的圖片方法

    今天小編就為大家分享一篇Django1.9 加載通過ImageField上傳的圖片方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python使用Spire.XLS實現(xiàn)Excel轉(zhuǎn)PDF的實踐指南

    Python使用Spire.XLS實現(xiàn)Excel轉(zhuǎn)PDF的實踐指南

    在日常辦公中,將 Excel 文件轉(zhuǎn)換為 PDF 是一個常見的需求,但是手動操作不僅繁瑣,而且還容易出錯,下面我們就來看看如何借助 Spire.XLS for Python,用幾行代碼輕松實現(xiàn) Excel 轉(zhuǎn) PDF吧
    2025-07-07
  • pythotn條件分支與循環(huán)詳解(2)

    pythotn條件分支與循環(huán)詳解(2)

    這篇文章主要介紹了Python條件分支和循環(huán)用法,結(jié)合實例形式較為詳細的分析了Python邏輯運算操作符,條件分支語句,循環(huán)語句等功能與基本用法,需要的朋友可以參考下
    2021-08-08

最新評論

舞钢市| 萨嘎县| 肇州县| 安泽县| 临洮县| 雷州市| 达日县| 沈阳市| 利川市| 新巴尔虎右旗| 靖宇县| 剑川县| 布尔津县| 建瓯市| 砚山县| 乌拉特后旗| 苍溪县| 黔江区| 毕节市| 贡嘎县| 陇川县| 红河县| 资中县| 永吉县| 上犹县| 家居| 贡嘎县| 怀集县| 关岭| 谷城县| 怀化市| 衡南县| 德保县| 巴楚县| 韩城市| 铜山县| 上栗县| 河津市| 册亨县| 镇宁| 阿荣旗|