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

Python中的sort方法、sorted函數(shù)與lambda表達(dá)式及用法詳解

 更新時間:2025年09月26日 14:25:18   作者:秋風(fēng)、蕭瑟  
文章對比了Python中l(wèi)ist.sort()與sorted()函數(shù)的區(qū)別,指出sort()原地排序返回None,sorted()生成新列表,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

1. sort()方法

1.1 sort()方法

list.sort()最核心、也最需要記住的特點是:它會直接修改原始列表,使其變?yōu)橛行驙顟B(tài)。也就是原地排序。因此,sort()方法的返回值是None。部分初學(xué)者可能會將其結(jié)果賦值給新變量,這種用法是錯誤的。正確的用法是無需將其結(jié)果賦值給新變量,直接使用被修改后的原列表即可,如下所示:

nums = [3, 1, 4, 1, 5, 9, 2]
nums.sort()
print(nums)

結(jié)果如下:

[1, 1, 2, 3, 4, 5, 9]

1.2 基本語法和參數(shù)

sort()方法的完整語法是:

list.sort(*, key=None, reverse=False)

它接受兩個可自選的關(guān)鍵字參數(shù):key和reverse。

A. reverse參數(shù)

這個參數(shù)非常直觀

  • reverse = False(默認(rèn)值):升序排序
  • reverse = True:降序排序
numbers = [4, 2, 8, 1, 6]
numbers.sort() # 默認(rèn)升序
print(numbers) # 輸出: [1, 2, 4, 6, 8]
numbers.sort(reverse=True) # 降序
print(numbers) # 輸出: [8, 6, 4, 2, 1]

B. key參數(shù)

key參數(shù)是sort()方法最強大的功能。它允許你自定義排序的邏輯。
key接受一個函數(shù)(通常是lambda匿名函數(shù))。在排序比較之前,列表中的每個元素都會先經(jīng)過這個key函數(shù)處理,然后Python會根據(jù)這個函數(shù)的返回值來進(jìn)行排序。

示例1:按字符串長度排序:
words = ["apple", "banana", "kiwi", "cherry"]
# key=len 意味著對每個單詞應(yīng)用 len() 函數(shù),然后按長度排序
words.sort(key=len)
print(words) # 輸出: ['kiwi', 'apple', 'banana', 'cherry']
示例2:忽略大小寫排序:
names = ["Bob", "alice", "Charlie", "david"]
names.sort()
print(names) # 輸出: ['Bob', 'Charlie', 'alice', 'david'] (默認(rèn)排序)
names.sort(key=str.lower)
print(names) # 輸出: ['alice', 'Bob', 'Charlie', 'david'] (忽略大小寫)
示例3:按對象的屬性排序(非常常用):
people = [
    {'name': 'Alice', 'age': 30},
    {'name': 'Bob', 'age': 25},
    {'name': 'Charlie', 'age': 35}
]
# 使用 lambda 函數(shù)提取 'age' 的值作為排序的 key
people.sort(key=lambda person: person['age'])
print(people)
# 輸出:
# [{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 35}]

當(dāng)然也可以同時使用key和reverse:

# 按年齡降序排序
people.sort(key=lambda person: person['age'], reverse=True)
print(people)
# 輸出:
# [{'name': 'Charlie', 'age': 35}, {'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}]

2. sorted()函數(shù)

Python還提供了一個內(nèi)置函數(shù)sorted(),它也用于排序。理解它們的區(qū)別至關(guān)重要。

list.sort()sorted()
類型列表的方法(method)內(nèi)置函數(shù)(function)
使用對象只能用于列表(list)可以用于任何可迭代對象(list, tuple, str, dict, etc.)
修改原地修改不能修改原始對象,通常賦值給一個新的變量
返回值None返回一個新的、已排序的列表

2.1 代碼對比

# 使用 list.sort()
original_list = [5, 2, 3]
original_list.sort() # 直接修改 original_list
print(f"Original list after sort(): {original_list}") # 輸出: [2, 3, 5]
# 使用 sorted()
original_tuple = (5, 2, 3)
new_list = sorted(original_tuple) # 不會修改 original_tuple,而是返回新列表
print(f"Original tuple: {original_tuple}") # 輸出: (5, 2, 3)
print(f"New list from sorted(): {new_list}") # 輸出: [2, 3, 5]

3. lambda函數(shù)

一個lambda函數(shù)是一個小型的、匿名的、單行表達(dá)式函數(shù)。

3.1 基本語法

lambda arguments: expression
  • lambda:關(guān)鍵字,表示你正在定義一個lambda函數(shù)。
  • arguments:和普通函數(shù)的參數(shù)一樣,可以有零個或多個,用逗號分割,也就是形參。
  • expression:一個單獨的表達(dá)式。計算這個表達(dá)式的結(jié)果,并作為函數(shù)的返回值。

3.2 lambda函數(shù)與普通函數(shù)的對比

A. 使用def(普通函數(shù))

def add(x, y):
  return x + y
result = add(2, 3)
print(result) # 輸出: 5

B. 使用lambda(匿名函數(shù))

add_lambda = lambda x, y: x + y
result = add_lambda(2, 3)
print(result) # 輸出: 5

3.3 lambda表達(dá)式的用法

lambda的主要用途是作為高階函數(shù)的參數(shù),

示例1:sorted函數(shù)和sort方法自定義排序規(guī)則

這是lambda最經(jīng)典、最常見的用途。sorted函數(shù)和sort方法有一個key參數(shù),你可以提供一個函數(shù),sorted函數(shù)和sort方法會根據(jù)這個函數(shù)的返回值對元素進(jìn)行排序。假設(shè)有一個元組列表,每個元組代表 (商品, 價格)。我們想按價格排序

items = [('apple', 2.5), ('banana', 1.8), ('cherry', 3.0)]
# 使用 def 的繁瑣方式
def get_price(item):
  return item[1]
sorted_items = sorted(items, key=get_price)
print(sorted_items)
# 使用 lambda 的簡潔方式
sorted_items_lambda = sorted(items, key=lambda item: item[1])
print(sorted_items_lambda)
# 輸出都是:
# [('banana', 1.8), ('apple', 2.5), ('cherry', 3.0)]

key=lambda item: item[1]創(chuàng)建了一個臨時的、無需命名的函數(shù),它接受一個item(元組),也就是items中的一個元素,并返回該元組的第二個元素(價格)。
其原理如下:

  • sorted()函數(shù)開始工作,它拿到了items列表。
  • 它需要對列表中的元素進(jìn)行比較排序。它看到了key=lambda item: item[1]這個規(guī)則。
  • 它取出第一個元素 ('apple', 2.5)。
  • 它將這個元素傳遞給lambda函數(shù),即item參數(shù)現(xiàn)在是 ('apple', 2.5)。
  • lambda函數(shù)執(zhí)行它的表達(dá)式item[1],返回的結(jié)果是2.5。sorted()函數(shù)在內(nèi)部記下:('apple', 2.5)的排序值為2.5。
  • 接著,它取出第二個元素('banana', 1.8)。
  • 它將這個元素傳遞給lambda函數(shù),item變成了('banana', 1.8)。
  • lambda函數(shù)執(zhí)行item[1],返回1.8。sorted()記下:('banana', 1.8)的排序值為1.8”。
  • 它取出第三個元素('cherry', 3.0),同樣地,通過lambda函數(shù)得到它的排序值為3.0。
  • 最后,sorted()根據(jù)這些排序值[2.5, 1.8, 3.0]來對原始的items列表進(jìn)行排序。1.8最小,2.5其次,3.0最大。
  • 所以,最終返回的排序結(jié)果是:[('banana', 1.8), ('apple', 2.5), ('cherry', 3.0)]。

上面的例子是對價格進(jìn)行升序排列,如果要進(jìn)行降序排列可以這樣寫:

items = [('apple', 2.5), ('banana', 1.8), ('cherry', 3.0)]
# 使用 lambda 的簡潔方式
# 該技巧僅適用于數(shù)值類型,其他類型,例如字符可能需要進(jìn)行多次排序
sorted_items_lambda = sorted(items, key=lambda item: -item[1])
print(sorted_items_lambda)
# 輸出是:
# [('cherry', 3.0), ('apple', 2.5), ('banana', 1.8)]

如果要進(jìn)行多級排序,可以這樣寫:

# 列表中元組中元素的含義分別為名稱、價格、重量
data = [
    ('Cherry', 20, 100),
    ('Apple', 20, 150),
    ('Banana', 30, 120),
    ('Date', 10, 500),
    ('Blueberry', 20, 100)
]
# 使用 lambda 返回一個元組作為排序的 key
# (item[1], item[2], item[0]) -> (價格, 重量, 名稱)
# 先按照價格排序,價格相同的情況下按照重量排序,價格和重量都相同的情況下按照名稱進(jìn)行排序
sorted_data = sorted(data, key=lambda item: (item[1], item[2], item[0]))
print(sorted_data)
# 輸出結(jié)果為:
[('Date', 10, 500), ('Blueberry', 20, 100), ('Cherry', 20, 100), ('Apple', 20, 150), ('Banana', 30, 120)]

示例2:map()——對序列中的每個元素應(yīng)用函數(shù)

numbers = [1, 2, 3, 4, 5]
# 使用 lambda
squared_numbers = map(lambda x: x * x, numbers)
print(list(squared_numbers)) # 輸出: [1, 4, 9, 16, 25]

示例3:filter()——篩選序列中的元素

# 從序列中篩選出所有的偶數(shù)
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
# 使用 lambda
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # 輸出: [2, 4, 6, 8]

到此這篇關(guān)于Python中的sort方法、sorted函數(shù)與lambda表達(dá)式及用法詳解的文章就介紹到這了,更多相關(guān)python sort sorted函數(shù)與lambda表達(dá)式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • np.concatenate()函數(shù)的具體使用

    np.concatenate()函數(shù)的具體使用

    本文主要介紹了np.concatenate()函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python函數(shù)參數(shù)匹配模型通用規(guī)則keyword-only參數(shù)詳解

    Python函數(shù)參數(shù)匹配模型通用規(guī)則keyword-only參數(shù)詳解

    Python3對函數(shù)參數(shù)的排序規(guī)則更加通用化了,即Python3 keyword-only參數(shù),該參數(shù)即為必須只按照關(guān)鍵字傳遞而不會有一個位置參數(shù)來填充的參數(shù)。這篇文章主要介紹了Python函數(shù)參數(shù)匹配模型通用規(guī)則keyword-only參數(shù),需要的朋友可以參考下
    2019-06-06
  • 利用Python實現(xiàn)文檔格式互轉(zhuǎn)的操作大全(PDF、Word、圖片、Markdown)

    利用Python實現(xiàn)文檔格式互轉(zhuǎn)的操作大全(PDF、Word、圖片、Markdown)

    客戶要求提交簡歷必須是PDF,但你只有Word版,手動轉(zhuǎn)換后格式全亂,需要從PDF報告中提取圖表,卻發(fā)現(xiàn)無法直接復(fù)制,只能一張張截圖,所以本文將手把手教你如何利用Python輕松實現(xiàn)DF、Word、圖片、Markdown的高效轉(zhuǎn)換,需要的朋友可以參考下
    2025-11-11
  • OpenCV python sklearn隨機超參數(shù)搜索的實現(xiàn)

    OpenCV python sklearn隨機超參數(shù)搜索的實現(xiàn)

    這篇文章主要介紹了OpenCV python sklearn隨機超參數(shù)搜索的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 想學(xué)python 這5本書籍你必看!

    想學(xué)python 這5本書籍你必看!

    想學(xué)python,這5本書籍你必看!本文為大家推薦了學(xué)習(xí)python的5本書籍,5本經(jīng)典書籍,感興趣的小伙伴們可以參考一下
    2018-12-12
  • django 多對多表的創(chuàng)建和插入代碼實現(xiàn)

    django 多對多表的創(chuàng)建和插入代碼實現(xiàn)

    這篇文章主要介紹了django-多對多表的創(chuàng)建和插入代碼實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Python實現(xiàn)的多線程http壓力測試代碼

    Python實現(xiàn)的多線程http壓力測試代碼

    這篇文章主要介紹了Python實現(xiàn)的多線程http壓力測試代碼,結(jié)合實例形式分析了Python多線程操作的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-02-02
  • Pycharm操作Git及GitHub的步驟詳解

    Pycharm操作Git及GitHub的步驟詳解

    這篇文章主要介紹了Pycharm操作Git及GitHub的步驟詳解,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Python線程之認(rèn)識線程安全?

    Python線程之認(rèn)識線程安全?

    這篇文章主要介紹了Python線程之認(rèn)識線程安全,線程安全,名字就非常直接,在多線程情況下是安全的,多線程操作上的安全,下面學(xué)習(xí)線程安全的文章詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • python 已知一個字符,在一個list中找出近似值或相似值實現(xiàn)模糊匹配

    python 已知一個字符,在一個list中找出近似值或相似值實現(xiàn)模糊匹配

    今天小編就為大家分享一篇python 已知一個字符,在一個list中找出近似值或相似值實現(xiàn)模糊匹配,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02

最新評論

桓仁| 雷州市| 亚东县| 邵阳县| 离岛区| 许昌县| 米易县| 轮台县| 松溪县| 德钦县| 托克逊县| 广德县| 阿图什市| 彰武县| 靖江市| 恩施市| 邵武市| 衡阳县| 耒阳市| 华容县| 霍山县| 罗定市| 灵宝市| 合肥市| 建瓯市| 沙河市| 油尖旺区| 新竹市| 布拖县| 什邡市| 柘城县| 徐汇区| 连山| 赤水市| 海阳市| 晋城| 宁德市| 广灵县| 灌阳县| 清水河县| 米泉市|