在本教程中,我們將借助示例了解 Python sorted() 方法。
sorted()
函數按特定順序(升序或降序)對給定迭代的元素進行排序,並將其作為列表返回。
示例
numbers = [4, 2, 12, 8]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
# Output: [2, 4, 8, 12]
用法:
用法:
sorted(iterable, key=None, reverse=False)
參數:
sorted()
最多可以帶三個參數:
- iterable- 一個序列(string,元組,列表) 或集合 (放,字典,frozenset) 或任何其他迭代器。
- 反向(可選)- 如果
True
, 排序後的列表被反轉(或按降序排序)。默認為False
如果沒有提供。 - 鍵(可選)- 用作排序比較鍵的函數。默認為
None
.
返回:
sorted()
函數返回一個排序列表。
示例 1:對字符串、列表和元組進行排序
# vowels list
py_list = ['e', 'a', 'u', 'o', 'i']
print(sorted(py_list))
# string
py_string = 'Python'
print(sorted(py_string))
# vowels tuple
py_tuple = ('e', 'a', 'u', 'o', 'i')
print(sorted(py_tuple))
輸出
['a', 'e', 'i', 'o', 'u'] ['P', 'h', 'n', 'o', 't', 'y'] ['a', 'e', 'i', 'o', 'u']
請注意,在所有情況下都會返回排序列表。
注意:一個列表也有List sort執行方式相同的方法sorted()
.唯一的區別是,sort()
方法不返回任何值並更改原始列表。
示例 2:按降序排序
sorted()
函數接受 reverse
參數作為可選參數。
設置 reverse = True
以降序對迭代進行排序。
# set
py_set = {'e', 'a', 'u', 'o', 'i'}
print(sorted(py_set, reverse=True))
# dictionary
py_dict = {'e': 1, 'a': 2, 'u': 3, 'o': 4, 'i': 5}
print(sorted(py_dict, reverse=True))
# frozen set
frozen_set = frozenset(('e', 'a', 'u', 'o', 'i'))
print(sorted(frozen_set, reverse=True))
輸出
['u', 'o', 'i', 'e', 'a'] ['u', 'o', 'i', 'e', 'a'] ['u', 'o', 'i', 'e', 'a']
Python sorted() 函數中的關鍵參數
如果您想要自己的排序實現,sorted()
還接受 key
函數作為可選參數。
根據 key 函數的返回值,可以對給定的 iterable 進行排序。
sorted(iterable, key=len)
在這裏,len()
是 Python 的內置函數,用於計算對象的長度。
該列表根據元素的長度進行排序,從最低計數到最高計數。
示例 3:使用具有鍵函數的 sorted() 對列表進行排序
# take the second element for sort
def take_second(elem):
return elem[1]
# random list
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
# sort list with key
sorted_list = sorted(random, key=take_second)
# print list
print('Sorted list:', sorted_list)
輸出
Sorted list: [(4, 1), (2, 2), (1, 3), (3, 4)]
示例 4:使用多個鍵進行排序
讓我們假設我們有以下列表:
# Nested list of student's info in a Science Olympiad
# List elements: (Student's Name, Marks out of 100, Age)
participant_list = [
('Alison', 50, 18),
('Terence', 75, 12),
('David', 75, 20),
('Jimmy', 90, 22),
('John', 45, 12)
]
我們希望以這樣一種方式對列表進行排序,使得分最高的學生排在最前麵。如果學生的分數相同,則必須對他們進行排序,以便年輕的參與者排在第一位。
我們可以通過返回元組而不是數字來實現這種多鍵排序。
可以通過從第一個開始比較它們的元素來比較兩個元組。如果存在平局(元素相等),則比較第二個元素,依此類推。
>>> (1,3) > (1, 4)
False
>>> (1, 4) < (2,2)
True
>>> (1, 4, 1) < (2, 1)
True
讓我們使用這個邏輯來構建我們的排序邏輯。
# Nested list of student's info in a Science Olympiad
# List elements: (Student's Name, Marks out of 100 , Age)
participant_list = [
('Alison', 50, 18),
('Terence', 75, 12),
('David', 75, 20),
('Jimmy', 90, 22),
('John', 45, 12)
]
def sorter(item):
# Since highest marks first, least error = most marks
error = 100 - item[1]
age = item[2]
return (error, age)
sorted_list = sorted(participant_list, key=sorter)
print(sorted_list)
輸出
[('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12)]
由於排序邏輯函數很小且適合一行,因此在key
內部使用lambda
函數,而不是傳遞單獨的函數名。
上麵的程序可以使用lambda
函數編寫如下:
# Nested list of student's info in a Science Olympiad
# List elements: (Student's Name, Marks out of 100 , Age)
participant_list = [
('Alison', 50, 18),
('Terence', 75, 12),
('David', 75, 20),
('Jimmy', 90, 22),
('John', 45, 12)
]
sorted_list = sorted(participant_list, key=lambda item: (100-item[1], item[2]))
print(sorted_list)
輸出
[('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12)]
要了解有關 lambda 函數的更多信息,請訪問 Python Lambda Functions。
相關用法
- Python sorted()和sort()用法及代碼示例
- Python sort()用法及代碼示例
- Python scipy.ndimage.binary_opening用法及代碼示例
- Python scipy.signal.windows.tukey用法及代碼示例
- Python scipy.stats.mood用法及代碼示例
- Python scipy.fft.ihfftn用法及代碼示例
- Python scipy.stats.normaltest用法及代碼示例
- Python scipy.ndimage.convolve1d用法及代碼示例
- Python scipy.stats.arcsine用法及代碼示例
- Python scipy.interpolate.UnivariateSpline.antiderivative用法及代碼示例
- Python scipy.linalg.hadamard用法及代碼示例
- Python sympy.rf()用法及代碼示例
- Python scipy.special.inv_boxcox1p用法及代碼示例
- Python sympy.stats.GammaInverse()用法及代碼示例
- Python scipy.stats.zipfian用法及代碼示例
- Python sympy.integrals.transforms.mellin_transform()用法及代碼示例
- Python sympy.replace()用法及代碼示例
- Python scipy.stats.sampling.TransformedDensityRejection用法及代碼示例
- Python scipy.sparse.lil_array.nonzero用法及代碼示例
- Python sympy from_rgs()用法及代碼示例
注:本文由純淨天空篩選整理自 Python sorted()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。