特點 | 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']
fruits = ['banana', 'apple', 'orange', 'grape']
sorted_fruits = sorted(fruits, key=len)
print(sorted_fruits) # 输出: ['apple', 'grape', 'banana', 'orange']
這裡,len 函數會返回每個字符串的長度,sorted() 函數會根據返回的長度進行排序。
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() 函數會根據返回的年齡值進行排序。
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() 函數會先根據元組的第一個元素(即原元組的第二個元素)進行排序,如果第一個元素相等,再根據第二個元素(即原元組的第一個元素)進行排序。
在 Python 中,字典(dictionary)本身是一種無序的數據結構,因此無法直接對字典進行排序。然而,我們可以使用 sorted()
函數來根據字典的鍵或值進行排序,並返回排序後的結果(通常以元組列表的形式)。
這樣我們就能依據不同的需求對字典進行靈活的排序操作。
sorted(my_dict)
:my_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
sorted_by_keys = sorted(my_dict) # 只返回排序後的鍵
print(sorted_by_keys) # 輸出:['apple', 'banana', 'cherry']
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}
1.不改變原始數據:
sorted() 不會修改原始的可迭代對象,它會返回一個新的已排序列表。這對於保持數據完整性特別重要,避免無意中改變了原始數據。
2.適用於所有可迭代對象:
sorted() 不僅適用於列表,還可以對元組、集合、字符串等進行排序,而 sort() 只能用於列表。這使得 sorted() 更加通用。
3.靈活性:
無論你是對列表進行排序,還是對其他不可變對象(如 tuple、set)進行排序,sorted() 都能應對。而且,它與 key 和 reverse 參數的配合使用也相當靈活。
儘管 sorted() 很好,但在某些情況下使用 sort() 仍有它的價值:
當你想對一個列表進行就地排序時,可以使用 sort() 方法。
這種方法適合在你不需要保留原始列表的情況下進行排序。
當你需要對其他可迭代對象進行排序,或需要保留原始數據時,使用 sorted() 函數。
sorted() 是更通用和靈活的選擇,因為它可以用於多種類型的數據。