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[i]有关的值,则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是正返回值时,交换两个元素,则最后就是一个升序排序。

如果这个函数一直返回True,则不排序,list还是原list。

但是注意,python 3里面取消了sort的cmp参数了。它的定义是:

L.sort(key=None, reverse=False) -> None

 

你可能感兴趣的:(技术人生,python)