python list元素数字字母混合按自己想法排序

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']
>>>

你可能感兴趣的:(python list元素数字字母混合按自己想法排序)