python list排序參數實現二維數組按照第2列排序

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章