list 的sort方法是將list裏面的數據直接排序,排序後,list的數據順序會變化。
而如果list是一個二維數組,也就是list 的list,想按照第2列排序,怎麼做?就是說,list是以下的矩陣形式:
list[0]: [4,2]
list[1]: [3,1]
list[2]: [5,0]
list[3]: [1,6]
注意到sort自己的參數就有提及:
list.sort(cmp=None, key=None, reverse=False)
參數定義
key定義按照哪一個元素排序。如果對於列表中的元素,list[10],則key可以是一個作用於list[i]的函數。比如:
def take2(elem):
return elem[1]
list1 =[(4,2),(3,1),(5,0), (1,6)]
list1.sort(key = take2)
print(list1)
>>[(5, 0), (3, 1), (4, 2), (1, 6)]
這裏,list[i]是一個tuple,elem[1]返回第二個元素。則sort會按照第2個元素來排序,是不是很方便啊?
python 2中,cmp是一個callable的函數。如果用個lambda算子來寫最基礎的升序排序,就是:
lambda x,y: x-y
這裏,x-y在x>y時返回正值,cmp是正返回值時,交換兩個元素,則最後就是一個升序排序。
但是python 3裏面取消了sort的cmp參數了。它的定義是:
L.sort(key=None, reverse=False) -> None