sort 與 sorted 區別:
- sort 是應用在 list 上的方法,屬於列表的成員方法,sorted 可以對所有可迭代的對象進行排序操作。
- list 的 sort 方法返回的是對已經存在的列表進行操作,而內建函數 sorted 方法返回的是一個新的 list,而不是在原來的基礎上進行的操作。
- sort使用方法為ls.sort(),而sorted使用方法為sorted(ls)
一、基本形式
列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。
排序,數字、字符串按照ASCII,中文按照unicode從小到大排序。
>>>List1 = [3, 2, 4, 5, 1, 9] >>>List1.sort() >>>List1 [1, 2, 3, 4, 5, 9]
如果需要一個排序好的副本,代碼如下:
>>>List1 = [3, 2, 4, 5, 1, 9] >>>List2 = List1[:] >>>List2.sort() >>>List2 [1, 2, 3, 4, 5, 9] >>>List1 [3, 2, 4, 5, 1, 9]
另一種獲取已排序的列表副本的方法是使用sorted函數:
>>>List1 = [3, 2, 4, 5, 1, 9] >>>List2 = sorted(List1) #sorted返回一個有序的副本,並且類型總是列表 >>>List2 [1, 2, 3, 4, 5, 9] >>>List1 [3, 2, 4, 5, 1, 9]
二、可選參數
sort方法還有兩個可選參數:key和reverse
1、key在使用時必須提供一個排序過程中調用的函數:
>>>List1 = ['1', '333', '22', '55555', '4444'] >>>List1.sort(key=len) >>>List1 ['1', '22', '333', '4444', '55555']
2、reverse實現逆序排序,需要提供一個布爾值:
>>>List1 = [3, 23, 1, 0, 8] >>>List1.sort(reverse=True) >>>List1 [23, 8, 3, 1, 0]
True為倒序排列,False為正序排列
三、例子
例:
列表按照其中每一個值的絕對值排序。
>>>List1 = [123, 89, -32, 0, 321, -36, 33] >>>List2 = sorted(List1, key=abs) >>>List2 [0, -32, 33, -36, 89, 123, 321] >>>List1 [123, 89, -32, 0, 321, -36, 33]
對復雜的元組排序
>>>student_tuples = [ ('john', 'A', 15), ('jane', 'B', 12), ('tom', 'A', 11), ('Jack', 'B', 13) ] >>>result = sorted(student_tuples, key=lambda student: student[2]) >>>result [('tom', 'A', 11), ('jane', 'B', 12), ('Jack', 'B', 13), ('john', 'A', 15)]
根據字典的value排序
默認sorted是對dict的key排序的,如果要根據dict的value排序就需要指定key參數了。
>>>dict_my = {'a': 2, 'c': 5, 'b': 1, 'ab': 6, 'e': 2} >>>dict_my {'a': 2, 'ab': 6, 'b': 1, 'c': 5, 'e': 2} >>>result = sorted(dict_my) >>>result ['a', 'ab', 'b', 'c', 'e'] >>>dict_my['c'] 5 >>>result2 = sorted(dict_my, key=lambda x : dict_my[x], reverse=True) >>>result2 ['ab', 'c', 'a', 'e', 'b']