以下內容基本是從python3.6的幫助文件中摘取部分翻譯的
python內建的list.sort()方法可以原地修改列表,進行排序,同時還有sorted()內建方法對乙個可迭代物件進行排序,並返回排序後的列表。
基本排序
簡單的公升序排序非常簡單,只需呼叫sorted()函式
>>> sorted([2,3,5,48,7])
[2, 3, 5, 7, 48]
如果你不需要原來的列表,那麼直接使用list.sort()方法是更有效率的
>>> list1 = [3,2,1,9,8,7]
>>> list1.sort()
>>> list1
[1, 2, 3, 7, 8, 9]
list.sort()和sorted()的另乙個差異是list.sort()方法只適用列表,而sorted()方法可以接受任何可迭代物件作為引數
key函式
list.sort()和sorted都有乙個key引數用來指定乙個函式用來比較
例如:乙個大小寫不敏感的排序
>>> sorted("this is a test string".split(), key=str.lower)
['a', 'is', 'string', 'test', 'this']
在實際中處理的是更複雜的物件,例如:
>>> student_tuple = [
... ('zhangsan','a',15),
... ('lisi','b',12),
... ('wangwu','b',10),
>>>
>>> sorted(student_tuple,key=lambda student:student[2])
[('wangwu', 'b', 10), ('lisi', 'b', 12), ('zhangsan', 'a', 15)]
這種方法對類的屬性也適用
operator模組的函式
上面使用key函式作為引數是非常常見的,所以python提供了更方便的函式,operator模組有itemgetter(),attrgetter()和methodcaller()函式。
使用這些函式,上面的例子會變得非常簡單且高效。
>>> from operator import itemgetter,attrgetter
>>> sorted(student_tuple,key=itemgetter(2))
[('wangwu', 'b', 10), ('lisi', 'b', 12), ('zhangsan', 'a', 15)]
公升序和降序
list.sort和sorted()都接收乙個布林值的reverse引數,用來是否是降序(預設排序是公升序)。
>>> sorted(student_tuple,key=itemgetter(2),reverse=true)
[('zhangsan', 'a', 15), ('lisi', 'b', 12), ('wangwu', 'b', 10)]
老的方式使用cmp引數
在python2.4以前,python沒有sorted內建函式,list,sort()也沒有key引數,當時py2.0是使用cmp引數來處理特殊的排序的。
在py3.0中,cmp引數被完全移除。
在py2.0中,sort允許呼叫乙個函式用來做比較,例如:
>>> def numeric_compare(x,y):
... return x- y
...>>> sorted([5,2,4,1,3],cmp=numeric_compare)
[1, 2, 3, 4, 5]
python字典如何排序?
字典中的元素是沒有順序的,所以不可以用dic 0 來訪問,會報錯。因為字典中的鍵是唯一的所以可以用dic key 來訪問。那麼如何根據字典的 鍵 和 值 來進行排序?可以用sorted dic,value,reverse 函式,引數dic為需要比較的引數,value為排序物件 可選擇按鍵或值排序 r...
Python 如何優化氣泡排序
什麼叫氣泡排序法?相信有接觸過演算法的朋友多少都了解氣泡排序法,那麼什麼是氣泡排序法呢?氣泡排序,英文名稱 bubble sort 是一種基礎的交換排序演算法,在日常工作中經常會用到,例如 頁面資料需按時間先後排序,這本質上也是一種氣泡排序法。喝過可樂的朋友都知道,可樂裡面的氣泡會向上浮,這就是氣泡...
Python如何實現列表排序
python 列表排序 題目 班級同學的成績存放在列表中,list 523,435,712,566,613,675,620,689,643 請將列表內的成績從小到大進行排序。1 氣泡排序 基本思想 相鄰的兩個元素進行比較,然後把較大的元素放到後面 正向排序 在一輪比較完後最大的元素就放在了最後乙個位...