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

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)置方法,直接對(duì)原列表進(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):按絕對(duì)值排序(適用于數(shù)字)。
len(x):按長(zhǎng)度排序(適用于字符串、列表等)。
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]
# 按絕對(duì)值排序
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ù),適用于簡(jiǎn)單的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):獲取可迭代對(duì)象的第 n 個(gè)元素(適用于元組、字典等)。
operator.attrgetter(‘attr’):獲取對(duì)象的屬性(適用于類實(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ù),對(duì)所有可迭代對(duì)象(如列表、元組、字典等)進(jìn)行排序,返回一個(gè)新列表,原對(duì)象不變。

參數(shù)說明

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

基本用法示例

# 對(duì)列表排序
numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
# [1, 1, 3, 4, 5]
# 對(duì)字符串排序(按字符的 ASCII 碼)
word = "python"
sorted_word = sorted(word)
print(sorted_word)
# ['h', 'n', 'o', 'p', 't', 'y']
# 對(duì)元組排序
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"]
# 按單詞長(zhǎng)度排序
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)]

對(duì)字典的鍵或值排序

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)地選擇排序策略:

  • 對(duì)小規(guī)模數(shù)據(jù)(通常是 <=64個(gè)元素),直接使用插入排序(因?yàn)樵谛?shù)據(jù)量上插入排序的常數(shù)因子更小,速度更快);
  • 對(duì)大規(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)定排序,即相等元素的相對(duì)順序在排序后保持不變。這對(duì)多關(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)。

平衡性能:對(duì)于不同規(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#(部分場(chǎng)景)
Enumerable.OrderBy LINQ 方法

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

相關(guān)文章

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

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

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

    Python中正則表達(dá)式對(duì)單個(gè)字符,多個(gè)字符和匹配邊界等使用

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

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

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

    Python實(shí)現(xiàn)多個(gè)Word文檔合并

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

芦山县| 金塔县| 常宁市| 肥城市| 武邑县| 玛曲县| 樟树市| 梓潼县| 建平县| 常德市| 长武县| 荃湾区| 安新县| 东乌珠穆沁旗| 安西县| 沙河市| 崇义县| 渝中区| 和林格尔县| 贵阳市| 万山特区| 蚌埠市| 南陵县| 镶黄旗| 辽宁省| 象山县| 泌阳县| 类乌齐县| 木兰县| 启东市| 澜沧| 镇原县| 兴宁市| 邵阳县| 天长市| 哈密市| 安康市| 乐业县| 泉州市| 靖边县| 黑龙江省|