python自带排序函数
具体想深入学习这2个函数可参考Python 排序---sort与sorted学习,本文章不细究,主要重点在功能实现上
1.内置函数sort()
用法:
list.sort(cmp=None, key=None, reverse=False)
参数说明:
- cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
2.内置函数sorted()
用法:
sorted(iterable[, cmp[, key[, reverse]]])
这个和第一种的差别之处在于:
1、sorted()不会改变原来的list,而是会返回一个新的已经排序好的list
2、list.sort()方法仅仅被list所定义,sorted()可用于任何一个可迭代对象
参数说明:
- iterable -- 可迭代对象。
- cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
自定义sort_key函数
下面代码可以使排序按字母以及数字正确顺序排序,用于sort()和sortd()的key参数
import re
def sort_key(s):
#sort_strings_with_embedded_numbers
re_digits = re.compile(r'(\d+)')
pieces = re_digits.split(s) # 切成数字与非数字
pieces[1::2] = map(int, pieces[1::2]) # 将数字部分转成整数
return pieces
排序list
list = ['abc12.txt','abc9.txt','abc99.txt','abc100.txt','aaa999.txt','234.bat','detail.bat']
list.sort(key=sort_key)
print newlist
或
list = ['abc12.txt','abc9.txt','abc99.txt','abc100.txt','aaa999.txt','234.bat','detail.bat']
newlist = sorted(list,key=sort_key)
print newlist
演示结果
>>> import re
>>> def sort_key(s):
... #sort_strings_with_embedded_numbers
... re_digits = re.compile(r'(\d+)')
... pieces = re_digits.split(s) # 切成数字与非数字
... pieces[1::2] = map(int, pieces[1::2]) # 将数字部分转成整数
... return pieces
...
>>> list = ['abc12.txt','abc9.txt','abc99.txt','abc100.txt','aaa999.txt','234.bat','detail.bat']
>>> list.sort()
>>> print list
['234.bat', 'aaa999.txt', 'abc100.txt', 'abc12.txt', 'abc9.txt', 'abc99.txt', 'detail.bat']
>>> list.sort(key=sort_key)
>>> print list
['234.bat', 'aaa999.txt', 'abc9.txt', 'abc12.txt', 'abc99.txt', 'abc100.txt', 'detail.bat']
>>>
>>>
>>> list = ['abc12.txt','abc9.txt','abc99.txt','abc100.txt','aaa999.txt','234.bat','detail.bat']
>>> newlist = sorted(list)
>>> print newlist
['234.bat', 'aaa999.txt', 'abc100.txt', 'abc12.txt', 'abc9.txt', 'abc99.txt', 'detail.bat']
>>> newlist = sorted(list,key=sort_key)
>>> print newlist
['234.bat', 'aaa999.txt', 'abc9.txt', 'abc12.txt', 'abc99.txt', 'abc100.txt', 'detail.bat']
>>>
网友评论