python 列表排序
2017-01-02
# 默认创建一个以list为子元素的list
>>> t_list = [[2,'z'], [1, 'y'], [3, 'x']]
# 1. 在未指定参数的情况下,默认的sort即为使用子元素的第一个元素排序
>>> t_list.sort()
>>> t_list
[[1, 'y'], [2, 'z'], [3, 'x']]
# 2. 通过key参数,可以指定使用子元素的那个第几个元素排序
# 此处以第一个元素排序
>>> t_list.sort(key=lambda x:x[0])
>>> t_list
[[1, 'y'], [2, 'z'], [3, 'x']]
# 此处以第二个元素排序
>>> t_list.sort(key=lambda x:x[1])
>>> t_list
[[3, 'x'], [1, 'y'], [2, 'z']]
# 3. 也可以通过自定义的函数排序
# 此处使用第一个元素比较进行排序
>>> t_list.sort(lambda x, y:cmp(x[0], y[0]))
>>> t_list
[[1, 'y'], [2, 'z'], [3, 'x']]
# 此处使用第二个元素比较进行排序
>>> t_list.sort(lambda x, y:cmp(x[1], y[1]))
>>> t_list
[[3, 'x'], [1, 'y'], [2, 'z']]
可能会有疑问,第三种方式和第二种一样的效果,有什么区别,
第三种方式只是用了cmp这个函数简单的比较了下大小,实际可以自定义函数进行比较,
从而实现更复杂的比较逻辑。
此处需要注意的是,lambda的返回结果应该是>0或者<0,当然=0就没有大小之分
如果使用如下的方法,将得不到正确的排序结果
>>> t_list.sort(lambda x, y:x[0]>y[0])
因为>比较的结果是:true/false, 而python会将false转成0, true转成1,这将导致lambda比较的结果永远>=0
>>> 1>2
False
>>> int(1>2)
0
>>> 2>1
True
>>> int(2>1)
1