亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、list.sort()

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

參數(shù)說明

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

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

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

基本用法示例

numbers = [3, 1, 4, 1, 5, 9, 2]
# 升序排序(默認(rèn))
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 個(gè)元素
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表達(dá)式示例

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

# 按字符串的最后一個(gè)字符排序
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 個(gè)元素(適用于元組、字典等)。
operator.attrgetter(‘attr’):獲取對象的屬性(適用于類實(shí)例)。

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ù),對所有可迭代對象(如列表、元組、字典等)進(jìn)行排序,返回一個(gè)新列表,原對象不變。

參數(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']

多級(jí)排序示例

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)點(diǎn),并且效率極高。

Timsort 的核心原理

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

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

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

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

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

Timsort 的好處

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

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

Timsort廣泛應(yīng)用

Java
Arrays.sort() 和 Collections.sort()
JavaScript (V8 引擎)
V8 引擎(Chrome、Node.js)
Swift
標(biāo)準(zhǔn)庫的 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語言變量和數(shù)據(jù)類型基礎(chǔ)學(xué)習(xí)

    python語言變量和數(shù)據(jù)類型基礎(chǔ)學(xué)習(xí)

    這篇文章主要為大家介紹了python語言變量和數(shù)據(jù)類型基礎(chǔ)學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • python 實(shí)現(xiàn)循環(huán)定義、賦值多個(gè)變量的操作

    python 實(shí)現(xiàn)循環(huán)定義、賦值多個(gè)變量的操作

    這篇文章主要介紹了python 實(shí)現(xiàn)循環(huán)定義、賦值多個(gè)變量的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python如何把Spark數(shù)據(jù)寫入ElasticSearch

    Python如何把Spark數(shù)據(jù)寫入ElasticSearch

    這篇文章主要介紹了Python如何把Spark數(shù)據(jù)寫入ElasticSearch,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python實(shí)現(xiàn)優(yōu)雅編寫LaTeX的示例代碼

    Python實(shí)現(xiàn)優(yōu)雅編寫LaTeX的示例代碼

    LaTeX?是一種廣泛用于排版學(xué)術(shù)論文、報(bào)告、書籍和演示文稿的標(biāo)記語言,本文主要為大家詳細(xì)介紹了如何使用?Python?來優(yōu)雅地編寫?LaTeX,提高效率并減少錯(cuò)誤,需要的可以參考下
    2024-02-02
  • Python MOCK SERVER moco模擬接口測試過程解析

    Python MOCK SERVER moco模擬接口測試過程解析

    這篇文章主要介紹了Python MOCK SERVER moco模擬過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python中的cls變量的功能和用法

    Python中的cls變量的功能和用法

    本文介紹了在Python的classmethod裝飾的類方法的cls變量的意義,通過幾個(gè)不同的示例對比,凸顯cls變量在Python編程中的應(yīng)用場景,本文通過一些具體示例,來演示cls參數(shù)的功能和用法,感興趣的朋友一起看看吧
    2025-06-06
  • Python中提取文件名擴(kuò)展名的多種方法實(shí)現(xiàn)

    Python中提取文件名擴(kuò)展名的多種方法實(shí)現(xiàn)

    在Python編程中,經(jīng)常會(huì)遇到需要從文件名中提取擴(kuò)展名的場景,Python提供了多種方法來實(shí)現(xiàn)這一功能,不同方法適用于不同的場景和需求,包括os.path.splitext、pathlib和手動(dòng)分割,感興趣的可以了解一下
    2025-06-06
  • Python的CGIHTTPServer交互實(shí)現(xiàn)詳解

    Python的CGIHTTPServer交互實(shí)現(xiàn)詳解

    本篇文章主要給大家詳細(xì)分析了Python的CGIHTTPServer交互實(shí)現(xiàn)過程以及相關(guān)代碼分享,有興趣的參考學(xué)習(xí)下。
    2018-02-02
  • python 下載文件的幾種方法匯總

    python 下載文件的幾種方法匯總

    這篇文章主要介紹了python 下載文件的幾種方法匯總,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • Python新版極驗(yàn)驗(yàn)證碼識(shí)別驗(yàn)證碼教程詳解

    Python新版極驗(yàn)驗(yàn)證碼識(shí)別驗(yàn)證碼教程詳解

    這篇文章主要介紹了Python新版極驗(yàn)驗(yàn)證碼識(shí)別驗(yàn)證碼,極驗(yàn)驗(yàn)證是一種在計(jì)算機(jī)領(lǐng)域用于區(qū)分自然人和機(jī)器人的,通過簡單集成的方式,為開發(fā)者提供安全、便捷的云端驗(yàn)證服務(wù)
    2023-02-02

最新評論