iT邦幫忙

0

Python sort() 和 sorted() 的比較

  • 分享至 

  • xImage
  •  

核心概念:sort() 和 sorted() 的比較

特點 sort() sorted()
用法 列表的方法 內置函數
返回值 None(原地排序,不返回值) 返回新的排序後的列表
作用對象 僅限於列表 任何可迭代對象(如列表、元組、集合、字符串等)但是串列裡面的資料必須都是相同型態才能進行排序
改變原始數據 會改變原始列表 不會改變原始數據
排序方式 可以升序或降序排序 可以升序或降序排序
使用 key 參數 支持 支持
其他 字元順序排列會由小至大(升序):A->Z->a->z

.sort() 列表的方法

語法範例

# 創建一個列表
numbers = [5, 2, 9, 1, 5, 6]

# 使用 sort() 進行升序排序
numbers.sort()
print(numbers)  # 輸出:[1, 2, 5, 5, 6, 9]

# 使用 sort() 進行降序排序
numbers.sort(reverse=True)
print(numbers)  # 輸出:[9, 6, 5, 5, 2, 1]

# 使用 key 參數來根據絕對值排序
numbers = [-5, -1, 2, -3]
numbers.sort(key=abs)
print(numbers)  # 輸出:[-1, 2, -3, -5]

sorted(list) 函數

語法

sorted(iterable, key=None, reverse=False)

參數:
iterable:要排序的可迭代對象。
key:可選,指定一個函數,用於從每個可迭代元素中提取一個用於比較的鍵。
reverse:可選,布林值,若設為 True,則將列表按降序排序。
範例:

lst= ['four','9','10']
sorted_lst = sorted(lst)
print(sorted_lst)
#['10','9','four']

what 什麼是 key 參數?:客製化排序的利器

  • 一個函數: key 參數接受一個可調用對象,通常是一個函數。
  • 排序依據: 這個函數會對序列中的每個元素進行操作,並返回一個值。sorted() 函數會根據這些返回值來進行排序。

why 為什麼要使用 key 參數?

  • 複雜排序: 當我們需要根據元素的某個特定屬性或計算結果來排序時,key 參數就顯得非常有用。
  • 自定義排序邏輯: 我們可以完全自定義排序的規則,而不僅僅是按照元素本身的大小進行排序。
  • 用法:
    • len:按長度排序
    • lambda:自定義排序邏輯

how 如何使用 key 參數?

  1. 按字符串長度len排序
fruits = ['banana', 'apple', 'orange', 'grape']
sorted_fruits = sorted(fruits, key=len)
print(sorted_fruits)  # 输出: ['apple', 'grape', 'banana', 'orange']

這裡,len 函數會返回每個字符串的長度,sorted() 函數會根據返回的長度進行排序。

  1. 按字典中的值value排序
students = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 23},
    {'name': 'Charlie', 'age': 27}
]
sorted_students = sorted(students, key=lambda x: x['age'])
print(sorted_students)  
# 按照年龄升序排序
#[{'name': 'Bob', 'age': 23}, {'name': 'Alice', 'age': 25}, {'name': 'Charlie', 'age': 27}]

這裡,lambda x: x['age'] 是一個匿名函數,它會返回字典中 age 鍵對應的值。sorted() 函數會根據返回的年齡值進行排序。

  1. 多級排序lambda
data = [(1, 'a'), (3, 'c'), (2, 'b')]
sorted_data = sorted(data, key=lambda x: (x[1], x[0]))
print(sorted_data)  
# 首先按第二个元素排序,然后按第一个元素排序
#[(1, 'a'), (2, 'b'), (3, 'c')]

這裡,lambda x: (x[1], x[0]) 返回一個元組,包含了原元組的第二個和第一個元素。sorted() 函數會先根據元組的第一個元素(即原元組的第二個元素)進行排序,如果第一個元素相等,再根據第二個元素(即原元組的第一個元素)進行排序。

如果是要sorted dictionary 是如何運用?

在 Python 中,字典(dictionary)本身是一種無序的數據結構,因此無法直接對字典進行排序。然而,我們可以使用 sorted() 函數來根據字典的鍵或值進行排序,並返回排序後的結果(通常以元組列表的形式)。
這樣我們就能依據不同的需求對字典進行靈活的排序操作。

  • 按字典中排序sorted(my_dict):
    要根據字典的鍵進行升序排序,可以直接對字典的鍵使用 sorted():
my_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
sorted_by_keys = sorted(my_dict)  # 只返回排序後的鍵
print(sorted_by_keys)  # 輸出:['apple', 'banana', 'cherry']
  • 按字典中的值value排序:
students = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 23},
    {'name': 'Charlie', 'age': 27}
]
sorted_students = sorted(students, key=lambda x: x['age'])
print(sorted_students)  
# 按照年龄升序排序
#[{'name': 'Bob', 'age': 23}, {'name': 'Alice', 'age': 25}, {'name': 'Charlie', 'age': 27}]

這裡,lambda x: x['age'] 是一個匿名函數,它會返回字典中 age 鍵對應的值。sorted() 函數會根據返回的年齡值進行排序。

  • 按**鍵-值- 對排序.items()
sorted_dict_by_keys = dict(sorted(my_dict.items()))
print(sorted_dict_by_keys)  # 輸出:{'apple': 3, 'banana': 1, 'cherry': 2}

為什麼可以考慮只使用 sorted()?

1.不改變原始數據:
sorted() 不會修改原始的可迭代對象,它會返回一個新的已排序列表。這對於保持數據完整性特別重要,避免無意中改變了原始數據。

2.適用於所有可迭代對象:
sorted() 不僅適用於列表,還可以對元組、集合、字符串等進行排序,而 sort() 只能用於列表。這使得 sorted() 更加通用。

3.靈活性:
無論你是對列表進行排序,還是對其他不可變對象(如 tuple、set)進行排序,sorted() 都能應對。而且,它與 key 和 reverse 參數的配合使用也相當靈活。

什麼情況下使用 sort()?

儘管 sorted() 很好,但在某些情況下使用 sort() 仍有它的價值:

  • 性能考量:如果你不需要保留原始列表,並且想避免創建一個新的列表,sort() 會更高效,因為它是就地排序,不需要分配額外的內存來存放新的列表。
  • 列表操作:當你確定只對列表進行操作,而且不在意原始列表的變化,sort() 是一個簡潔且高效的選擇。

總結

使用 sort():

當你想對一個列表進行就地排序時,可以使用 sort() 方法。
這種方法適合在你不需要保留原始列表的情況下進行排序。

使用 sorted():

當你需要對其他可迭代對象進行排序,或需要保留原始數據時,使用 sorted() 函數。
sorted() 是更通用和靈活的選擇,因為它可以用於多種類型的數據。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言