在現代社會中,數據處理變得越來越重要,因為這些處理數據的工作需要對大量的數據進行分類,排序和整理。針對這些問題,Python提供了強大的工具,可以幫助我們快速地整理和處理這些數據。其中最重要的工具之一是 Python的列表排序功能,可以快速排序數據、剔除重複值和找出最大、最小值等操作,本篇文章將深入淺出的介紹 Python列表排序。
一、基礎排序
Python中,列表可以通過 sort() 方法進行排序。sort()默認為升序排序,同時提供了一個 reverse 參數進行降序排序。以下是一個簡單的示例:
# 升序排序 lst = [9, 1, 3, 7, 5] lst.sort() print(lst) # 降序排序 lst = [9, 1, 3, 7, 5] lst.sort(reverse=True) print(lst)
輸出結果分別為:
[1, 3, 5, 7, 9] [9, 7, 5, 3, 1]
在工作中,通常需要按照某種特定的方式對列表進行排序。有時候需要按照一些規則或屬性對列表進行排序,這時需要使用key參數。下面是一個示例代碼,以字符串長度為key參數進行排序:
lst = ['apple', 'pear', 'orange', 'kiwi', 'banana'] lst.sort(key=len) print(lst)
輸出結果為:
['kiwi', 'pear', 'apple', 'banana', 'orange']
二、穩定排序
Python中的 sort() 方法是基於快排算法實現的,具有不穩定排序的特點。但是如果在考慮到排序的穩定性時,建議使用 sorted() 方法。sorted() 方法返回一個新的已排序的列表,可以按照需要指定 sort 的 key 參數。
下面是一個使用 sorted() 方法穩定排序的示例,以對象屬性為 key 參數進行排序:
data = [ {'name': 'bob', 'age': 18}, {'name': 'alice', 'age': 18}, {'name': 'john', 'age': 20}, {'name': 'jane', 'age': 20}, {'name': 'dave', 'age': 18}, ] sorted_data = sorted(data, key=lambda x: (x['age'], x['name'])) for item in sorted_data: print(item)
輸出結果如下:
{'name': 'alice', 'age': 18} {'name': 'bob', 'age': 18} {'name': 'dave', 'age': 18} {'name': 'jane', 'age': 20} {'name': 'john', 'age': 20}
在上述示例代碼中,age相同的記錄採用字母序作為第二關鍵字,這種排序方式保證了數據排序的穩定性。
三、複雜排序
由於 Python 的排序算法非常靈活,所以可以進行各種複雜的排序任務。例如,基於時間對記錄進行排序,以字符串的某些子字符串為 key 參數進行排序等等。
下面是一個示例代碼,對一個由時間組成的字符串列表進行排序:
from datetime import datetime times = [ '2021-01-01 08:00:00', '2021-01-03 10:00:00', '2021-01-02 15:00:00', ] dt_format = '%Y-%m-%d %H:%M:%S' sorted_times = sorted(times, key=lambda x: datetime.strptime(x, dt_format)) for item in sorted_times: print(item)
輸出結果如下:
2021-01-01 08:00:00 2021-01-02 15:00:00 2021-01-03 10:00:00
在上述示例代碼中,使用 datetime.strptime() 方法將時間字符串轉換成 datetime 類型,然後將其用作關鍵字來排序。
四、性能優化
在程序中,排列算法執行的時間和資源越少,程序就越快,所以我們可以在不影響結果的情況下,嘗試優化排序算法的執行效率。針對需要排序的大型列表,Python中內置的 sort() 方法可能會比較慢。
針對這種問題,Python使用了外部庫numpy
,它提供了一種更高效的排序算法。下面的示例演示如何使用numpy庫進行一個數據列表的排序:
import numpy as np arr = np.array([9, 1, 3, 7, 5]) sorted_arr = np.sort(arr) print(sorted_arr)
輸出結果如下:
[1 3 5 7 9]
numpy
是一種有效的優化算法。這裡我們可以使用 numpy.argsort() 方法排序大型列表,然後用這個列表去重新排序原始數據列表:
arr = np.array([9, 1, 3, 7, 5]) sorted_index = np.argsort(arr) print(sorted_index) sorted_arr = arr[sorted_index] print(sorted_arr)
輸出結果如下:
[1 2 4 3 0] [1 3 5 7 9]
通過 numpy.argsort()排序的結果並不是一個排序好的列表,而是一個索引列表,可以用它來重新排序原始的數據,這樣就可以減少排序的時間。
總結
在數據處理過程中,數據量的大小程度不一,對數據的排序算法性能是至關重要的。Python提供了它內置的sort()方法,在大多數情況下可以非常完美地解決數據排序,同時還有 numpy
庫的支持,可用於將更快的排序算法應用於大型數據集。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/194166.html