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