Python對(duì)列表進(jìn)行排序的五種方法示例代碼
前言
在 Python 中,排序是一個(gè)非常常見且重要的操作,尤其是對(duì)列表的排序。Python 提供了多種方法來實(shí)現(xiàn)排序操作,從內(nèi)置函數(shù)到自定義排序邏輯,都可以方便地滿足不同的需求。以下將介紹 Python 對(duì)列表進(jìn)行排序的 5 種方法,并配以示例代碼。
方法 1:使用 sort() 方法(原地排序)
list.sort()
是列表的一個(gè)內(nèi)置方法,它會(huì)直接對(duì)列表本身進(jìn)行排序(即原地排序,不會(huì)返回新的列表)。它支持兩種可選參數(shù):
key
:指定排序的依據(jù)(通常是一個(gè)函數(shù))。reverse
:是否降序,默認(rèn)值為False
。
特點(diǎn):
- 修改原列表,無返回值。
- 效率高,適合處理較大的列表。
示例代碼:
# 示例 1:默認(rèn)升序排序 nums = [5, 2, 9, 1, 5, 6] nums.sort() # 原地排序 print(nums) # 輸出:[1, 2, 5, 5, 6, 9] # 示例 2:降序排序 nums = [5, 2, 9, 1, 5, 6] nums.sort(reverse=True) print(nums) # 輸出:[9, 6, 5, 5, 2, 1] # 示例 3:基于字符串長(zhǎng)度排序 words = ["apple", "banana", "kiwi", "cherry"] words.sort(key=len) print(words) # 輸出:['kiwi', 'apple', 'cherry', 'banana']
方法 2:使用 sorted() 函數(shù)(返回新列表)
sorted()
是一個(gè)內(nèi)置函數(shù),用于對(duì)可迭代對(duì)象進(jìn)行排序。與 sort()
不同,sorted()
不會(huì)修改原列表,而是返回一個(gè)新的排序后的列表。
特點(diǎn):
- 不改變?cè)斜?,返回新列表?/li>
- 適合需要保留原列表的場(chǎng)景。
示例代碼:
# 示例 1:默認(rèn)升序排序 nums = [5, 2, 9, 1, 5, 6] sorted_nums = sorted(nums) print(sorted_nums) # 輸出:[1, 2, 5, 5, 6, 9] print(nums) # 原列表不變,輸出:[5, 2, 9, 1, 5, 6] # 示例 2:降序排序 nums = [5, 2, 9, 1, 5, 6] sorted_nums = sorted(nums, reverse=True) print(sorted_nums) # 輸出:[9, 6, 5, 5, 2, 1] # 示例 3:基于自定義規(guī)則排序 words = ["apple", "banana", "kiwi", "cherry"] sorted_words = sorted(words, key=len) print(sorted_words) # 輸出:['kiwi', 'apple', 'cherry', 'banana']
方法 3:使用 lambda 表達(dá)式進(jìn)行自定義排序
無論是 sort()
還是 sorted()
,都可以通過 key
參數(shù)指定排序依據(jù)。這里常使用 lambda
表達(dá)式來定義自定義排序規(guī)則。
特點(diǎn):
- 靈活性高,可根據(jù)具體需要定義排序規(guī)則。
- 常用于復(fù)雜的排序場(chǎng)景。
示例代碼:
# 基于元組的第二個(gè)元素排序 data = [(1, 3), (4, 1), (2, 2), (3, 4)] data.sort(key=lambda x: x[1]) # 按元組的第二個(gè)元素排序 print(data) # 輸出:[(4, 1), (2, 2), (1, 3), (3, 4)] # 按字符串的最后一個(gè)字母排序 words = ["apple", "banana", "kiwi", "cherry"] sorted_words = sorted(words, key=lambda x: x[-1]) # 按單詞最后一個(gè)字母排序 print(sorted_words) # 輸出:['banana', 'apple', 'cherry', 'kiwi']
方法 4:使用 reverse() 方法倒序排列
reverse()
是列表的一個(gè)內(nèi)置方法,用于將列表中的元素順序顛倒。需要注意,它不是真正的排序,而是直接將當(dāng)前順序反轉(zhuǎn)。
特點(diǎn):
- 修改原列表,直接反轉(zhuǎn)列表順序。
- 更適合已經(jīng)排好序的列表。
示例代碼:
# 示例:將列表倒序排列 nums = [1, 2, 3, 4, 5] nums.reverse() print(nums) # 輸出:[5, 4, 3, 2, 1]
方法 5:自定義排序算法
當(dāng)內(nèi)置的 sort()
或 sorted()
無法滿足需求時(shí),可以實(shí)現(xiàn)自己的排序算法(如冒泡排序、快速排序等)。以下以 冒泡排序 為例。
特點(diǎn):
- 更適合學(xué)習(xí)和理解排序算法的實(shí)現(xiàn)原理。
- 實(shí)際開發(fā)中,推薦使用內(nèi)置排序方法,效率更高。
示例代碼:冒泡排序
def bubble_sort(nums): n = len(nums) for i in range(n): for j in range(0, n-i-1): if nums[j] > nums[j+1]: # 比較相鄰的元素 nums[j], nums[j+1] = nums[j+1], nums[j] # 交換位置 # 測(cè)試代碼 nums = [5, 2, 9, 1, 5, 6] bubble_sort(nums) print(nums) # 輸出:[1, 2, 5, 5, 6, 9]
總結(jié)與對(duì)比
方法 | 適用場(chǎng)景 | 是否修改原列表 | 靈活性 | 性能表現(xiàn) |
---|---|---|---|---|
sort() | 原地排序,不需要保存原列表 | 是 | 較高 | 快速(Timsort 算法) |
sorted() | 保留原列表,生成新排序列表 | 否 | 較高 | 快速(Timsort 算法) |
lambda 自定義排序 | 需要復(fù)雜規(guī)則排序的場(chǎng)景 | 可選 | 非常高 | 依賴于 sort() 或 sorted() |
reverse() | 簡(jiǎn)單倒序排列 | 是 | 一般 | 快速 |
自定義排序算法 | 學(xué)習(xí)排序原理或特殊場(chǎng)景 | 可選 | 非常高 | 根據(jù)實(shí)現(xiàn)算法而定 |
最佳實(shí)踐建議
- 使用內(nèi)置方法:
sort()
和sorted()
是排序的首選方法,性能高且易用,適合大多數(shù)場(chǎng)景。 - 自定義排序規(guī)則:通過
key
參數(shù)和lambda
表達(dá)式可以輕松實(shí)現(xiàn)復(fù)雜排序邏輯。 - 特殊場(chǎng)景使用自定義算法:在了解排序算法原理或處理特殊需求時(shí),可以自己實(shí)現(xiàn)排序算法,但性能可能不如內(nèi)置方法。
通過以上 5 種方法,你可以輕松地對(duì)列表進(jìn)行排序,滿足各種實(shí)際需求!
到此這篇關(guān)于Python對(duì)列表進(jìn)行排序的五種方法的文章就介紹到這了,更多相關(guān)Python列表排序方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python自動(dòng)化實(shí)戰(zhàn)之接口請(qǐng)求的實(shí)現(xiàn)
本文為大家重點(diǎn)介紹如何通過 python 編碼來實(shí)現(xiàn)我們的接口測(cè)試以及通過Pycharm的實(shí)際應(yīng)用編寫一個(gè)簡(jiǎn)單接口測(cè)試,感興趣的可以了解一下2022-05-05python如何獲取tensor()數(shù)據(jù)類型中的值
這篇文章主要介紹了python如何獲取tensor()數(shù)據(jù)類型中的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07使用Python實(shí)現(xiàn)MapReduce的示例代碼
MapReduce是一個(gè)用于大規(guī)模數(shù)據(jù)處理的分布式計(jì)算模型,最初由Google工程師設(shè)計(jì)并實(shí)現(xiàn)的,Google已經(jīng)將完整的MapReduce論文公開發(fā)布了,本文給大家介紹了使用Python實(shí)現(xiàn)MapReduce的示例代碼,需要的朋友可以參考下2024-05-05在Python的struct模塊中進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換的方法
這篇文章主要介紹了在Python的struct模塊中進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換的方法,文中還給出了C語言和Python語言的數(shù)據(jù)類型比較,需要的朋友可以參考下2015-06-06簡(jiǎn)化Python的Django框架代碼的一些示例
這篇文章主要介紹了簡(jiǎn)化Python的Django框架代碼的一些示例,實(shí)際上文中只是抽取了一些Django中最基本的功能用于簡(jiǎn)化入門者的上手復(fù)雜度,下,需要的朋友可以參考下2015-04-04