(轉)python3中sort和sorted的區別詳解


 

版權聲明:本文為CSDN博主「Vince Li」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_43250623/article/details/88829341

sort和sorted的區別
雖然python3中sort()和sorted()都可以用來排序,但二者有以下兩個最主要的區別:

sort只能應用在列表list上,而sorted可以對所有可迭代的對象進行排序的操作

sort方法會在原list上直接進行排序,不會創建新的list。而sorted方法不會對原來的數據做任何改動,排序后的結果是新生成的。
如果我們不需要原來的數據而且數據是list類型,可以用sort方法,能夠節省空間。否則要用sorted方法。
sort
在python3中有key和reverse兩個可選參數。參數reverse指定排序是升序還是降序,默認是升序參數key指定了只含一個參數的方法,這個方法用來從列表的每個元素中提取比較鍵。可以看看下面幾個例子:

1.通過元素長度排序

s_list = ["bbb","ccc","bac","ab","ba"]
s_list.sort(key=len) # key=len 指定排序規則按長度排序
print(s_list)
1
2
3
打印結果如下:

['ab', 'ba', 'bbb', 'ccc', 'bac']
1
2.通過元素的字符順序

s_list = ["bbb","BBB","bAc","ab","bac"]
s_list.sort() # 默認升序
print(s_list)
s_list.sort(key=str.lower)  # 先小寫再大寫
print(s_list)
1
2
3
4
5
打印結果如下:

['BBB', 'ab', 'bAc', 'bac', 'bbb']
['ab', 'bAc', 'bac', 'BBB', 'bbb']
1
2
3.更復雜一點的排序:list里的元素是一個字典,通過字典的某個屬性值排序。
下面是通過學生的年齡排序

student = [{"name": "小C", "age": 12, "score": 90},
           {"name": "小D", "age": 13, "score": 84},
           {"name": "小A", "age": 14, "score": 85},
           {"name": "小E", "age": 15, "score": 89},
           {"name": "小F", "age": 12, "score": 88}]
student.sort(key=lambda a: a["age"])
# 此方法是對list的元素進行排序,每一個元素是一個字典,按字典中的age進行排序,但不能直接對字典進行排序,sort的操作對象只能是list
print(student)
1
2
3
4
5
6
7
8
打印結果如下:

[{'name': '小C', 'age': 12, 'score': 90},
{'name': '小F', 'age': 12, 'score': 88},
{'name': '小D', 'age': 13, 'score': 84},
{'name': '小A', 'age': 14, 'score': 85},
{'name': '小E', 'age': 15, 'score': 89}]
1
2
3
4
5
由於sort只有list類型才可以用屬於列表的成員方法,所以用的更普遍的是sorted方法,下面來說下sorted方法
注意:sort只有list類型才可以用
注意:sort只有list類型才可以用
注意:sort只有list類型才可以用

返回值
sort方法會在原list上直接進行排序,不會創建新的list,所以sort沒有返回值或者說返回None

sorted
所有可迭代對象都可以用sorted來進行排序,排序不會改變原來的對象。sorted接收3個參數:

sorted一共有iterable, key, reverse這三個參數;
sorted(iterable, , key=None, reverse=False)

參數    作用
iterable    可迭代對象 , 例如: dict.items()、dict.keys()等
key    用來選取參與比較的元素, 例如確定是按照字典的鍵比較還是按照值進行比較
reverse    用來指定排序是升序還是降序,reverse=true是降序,false時則是升序,默認時是升序
看下面一個小例子:

s_tuples = [('john', 'A', 15),
                  ('jane', 'B', 12),
                  ('dave', 'B', 10)]
new_tuples = sorted(s_tuples , key=lambda student: student[2]) # student[2]表示按照列表中的元組中的第三個元素的大小進行排序
print(s_tuples )
print(new_tuples)
1
2
3
4
5
6
打印結果如下:

[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] # 原始的
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] # 排序過的
1
2
新列表是通過年齡排序的,從打印結果可以看出沒有改變原數據

這種含有key參數的方法使用十分普遍

2,對字典的值進行排序
a = { "b": 5, "c": 2,"a": 4, "d": 1}
#對字典按值(value)進行排序(默認由小到大)
test_2=sorted(a.items(),key=lambda x:x[1])
#輸出結果
print(test_2)
1
2
3
4
5
打印結果為:

 [('d', 1), ('c', 2), ('a', 4), ('b', 5)] # 對值進行了排序
1
返回值
sorted方法不會對原來的數據做任何改動,排序后的結果是新生成的。所以sorted會返回一個排序過的列表
————————————————


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM