Python 带数字的字符串排序
当字符串中有数字的时候,想给字符串进行排序,不管用列表的sort()方法,还是sorted()方法,都一想,得到的结果会发现都不是我们想要的。
举个例子:
1 | list1 = ['01', '11', '10', '21', '02'] |
当给这样的列表中的字符串直接排序的时候,看print打印出来的结果,只有纯数字的字符串列表list1是正确的,list2和list3排完后都不是我们想要的结果。
比如list2的排序,排序前是:list2 = ['学生2', '学生1', '学生10', '学生4']
排序完后是:list2 = ['学生1', '学生10', '学生2', '学生4']
这里就需要用到sort()方法中的key参数了。
List sort()方法
功能:用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
语法:list.sort(cmp=None, key=None, reverse=False)
cmp:可选参数, 如果指定了该参数会使用该参数的方法进行排序。
key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse:排序规则,reverse=True 降序, reverse=False 升序(默认)。
解决方法
1.使用匿名函数
代码如下 :
1 | list2 = ['学生2', '学生1', '学生10', '学生4'] |
使用匿名函数,customeSort指列表的数据。
如果不好理解,可以用下面的方法。
2.更清晰的写法
用这个方法,可以直接debug看一下,每一步做了什么。结果是一样的。
1 | def customeSort(arr): |
这个方法还有一个好处 ,比如上面的例子中,数字的起始坐标位置都是2,如果不是确定的就写起来更复杂一点了。但写出来一个函数,就看起来清晰一点了。
比如下面这个例子(明显,我是想按第一个_
前面的数字排序一下,默认的排序出来是不对的):
1 | def customeSort(arr): |
- 本文标题:Python 带数字的字符串排序
- 本文作者:HDUZN
- 创建时间:2022-11-29 21:11:32
- 本文链接:http://hduzn.cn/2022/11/29/Python-带数字的字符串排序/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
评论