Python list列表的排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python list列表的排序相关的知识,希望对你有一定的参考价值。
当我们从数据库中获取一写数据后,一般对于列表的排序是经常会遇到的问题,今天总结一下python对于列表list排序的常用方法:
第一种:内建函数sort()
这个应该是我们使用最多的也是最简单的排序函数了,可以直接对列表进行排序
用法:
list.sort(func=None, key=None, reverse=False(or True))
对于reverse这个bool类型参数,当reverse=False时:为正向排序;当reverse=True时:为方向排序。当然默认为False。
执行完后会改变原来的list
例如:
>>> list = [2,8,4,6,9,1,3] >>> list.sort() >>> list [1, 2, 3, 4, 6, 8, 9]
第二种:序列类型函数sorted()
这个和第一种的差别之处在于,其不会改变原来的list,而是会返回一个对象
用法:
sorted(list)
同样跟第一种方法一样,该函数也含有reverse这个bool类型的参数,当reverse=False时:为正向排序(从小到大);当reverse=True时:为反向排序(从大到小)。当然默认为False。
执行完后会有返回一个新的排序好的list对象
例如:
>>> list = [2,8,4,1,5,7,3] >>> other = sorted(list) >>> other [1, 2, 3, 4, 5, 7, 8]
当然,有时候我们会遇到这种情况,那就是列表里面每一个元素不止一个元素(比如:列表里面,元素为元祖类型),我们除了想对第一个关键字排序之外,还想在第一次的基础上面根据第二个关键字进行排序,那么我们可以使用第三种方法。
第三种:
这种方法其实就是基于第二种sorted()函数排序的扩展。这里需要用到 lambda 表达式。
先看一个例子:
我们想先排序列表list中元素的第一个关键字,然后在第一个元素的基础上排序按第二个关键字进行排序,看结果:
>>> list = [(‘d‘,3),(‘a‘,5),(‘d‘,1),(‘c‘,2),(‘d‘,2)] >>> print sorted(list, key = lambda x:(x[0],x[1])) [(‘a‘, 5), (‘c‘, 2), (‘d‘, 1), (‘d‘, 2), (‘d‘, 3)]
还有一种:
今天遇到了这么一个问题,就是遇到一个字符串的处理问题,比如说 f10 得排在 f2 的后面。找到了这么一种方法,供参考:
参考地址:http://blog.csdn.net/houyj1986/article/details/22966799
#encoding=utf-8 print ‘中国‘ #根据字符串中的数字排序,如f10应该在f2后面 import re re_digits = re.compile(r‘(\d+)‘) def emb_numbers(s): pieces=re_digits.split(s) pieces[1::2]=map(int,pieces[1::2]) return pieces def sort_strings_with_emb_numbers(alist): aux = [(emb_numbers(s),s) for s in alist] aux.sort() return [s for __,s in aux] def sort_strings_with_emb_numbers2(alist): return sorted(alist, key=emb_numbers) filelist=‘file10.txt file2.txt file1.txt‘.split() print filelist print ‘--DSU排序‘ print sort_strings_with_emb_numbers(filelist) print ‘--内置DSU排序‘ print sort_strings_with_emb_numbers2(filelist)
打印结果如下:
中国 [‘file10.txt‘, ‘file2.txt‘, ‘file1.txt‘] --DSU排序 [‘file1.txt‘, ‘file2.txt‘, ‘file10.txt‘] --内置DSU排序 [‘file1.txt‘, ‘file2.txt‘, ‘file10.txt‘]
以上是关于Python list列表的排序的主要内容,如果未能解决你的问题,请参考以下文章