Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
python怎么把数字字符串排序_python按数字大小排序的方法,希望能够帮助你!!!。
一、前言
列表排序基础:https://www.jianshu.com/p/44dcb
列表的字符串包含数字,直接使用sorted()排序,得到的结果往往不如人意,如下:
your_list = ["a1", "a2", "a10", "b2", "b1"]
print(sorted(your_list))
#输出
['a1', 'a10', 'a2', 'b1', 'b2']
期望大多数是这样:['a1', 'a2', 'a10', 'b1', 'b2']
二、纯数字字符串
shuzi_list = ['1', '4', '2', '3', '22', '23', '24', '33', '35']
print(sorted(shuzi_list))
#传参key,使用匿名函数,info指列表的数据,将字符串转为整数然后排序
print(sorted(shuzi_list, key=lambda info: (int(info))))
#输出
['1', '2', '22', '23', '24', '3', '33', '35', '4']
['1', '2', '3', '4', '22', '23', '24', '33', '35']
三、字符串一侧含有数字
#数字在左边,关注字符串截取
list2 = ['0.jpg', '1.jpg', '10.jpg', '11.jpg', '12.jpg', '13.jpg', '14.jpg', '15.jpg', '16.jpg', '17.jpg', '18.jpg',
'19.jpg', '2.jpg', '20.jpg', '21.jpg', '22.jpg', '23.jpg', '24.jpg', '25.jpg', '3.jpg', '4.jpg', '5.jpg',
'6.jpg', '7.jpg', '8.jpg', '9.jpg']
#新增传参key,类型为元组,对字符串分组处理,按照元组的两个值排序
print(sorted(list2, key=lambda info: (int(info[0:-4]), info[-4:])))
#数字在右边,关注字符串截取
your_list = ["a1", "a2", "a10", "b2", "b1"]
#同理
print(sorted(your_list, key=lambda info: (info[0], int(info[1:]))))
#输出
['0.jpg', '1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.jpg', '9.jpg', '10.jpg', '11.jpg', '12.jpg', '13.jpg', '14.jpg', '15.jpg', '16.jpg', '17.jpg', '18.jpg', '19.jpg', '20.jpg', '21.jpg', '22.jpg', '23.jpg', '24.jpg', '25.jpg']
['a1', 'a2', 'a10', 'b1', 'b2']
四、字符串两边都有数字
字符串两边都是数字,用索引处理就很难了,需要用到正则表达式,提取数字进行排序
import re
zh_list = ['最終話-兩人的故事重新書寫-0.jpg', '最終話-兩人的故事重新書寫-1.jpg', '最終話-兩人的故事重新書寫-10.jpg', '最終話-兩人的故事重新書寫-11.jpg',
'最終話-兩人的故事重新書寫-12.jpg', '最終話-兩人的故事重新書寫-13.jpg', '最終話-兩人的故事重新書寫-14.jpg', '最終話-兩人的故事重新書寫-15.jpg',
'最終話-兩人的故事重新書寫-16.jpg', '最終話-兩人的故事重新書寫-17.jpg', '最終話-兩人的故事重新書寫-18.jpg', '最終話-兩人的故事重新書寫-19.jpg',
'最終話-兩人的故事重新書寫-2.jpg', '最終話-兩人的故事重新書寫-20.jpg', '最終話-兩人的故事重新書寫-21.jpg', '最終話-兩人的故事重新書寫-22.jpg',
'最終話-兩人的故事重新書寫-23.jpg', '最終話-兩人的故事重新書寫-24.jpg', '最終話-兩人的故事重新書寫-25.jpg', '最終話-兩人的故事重新書寫-3.jpg',
'最終話-兩人的故事重新書寫-4.jpg', '最終話-兩人的故事重新書寫-5.jpg', '最終話-兩人的故事重新書寫-6.jpg', '最終話-兩人的故事重新書寫-7.jpg',
'最終話-兩人的故事重新書寫-8.jpg', '最終話-兩人的故事重新書寫-9.jpg']
#用正则表达式提取数字排序
print(sorted(zh_list, key=lambda info: (int(re.findall(r'-(\d+).jpg', info)[0]))))
#输出
['最終話-兩人的故事重新書寫-0.jpg', '最終話-兩人的故事重新書寫-1.jpg', '最終話-兩人的故事重新書寫-2.jpg', '最終話-兩人的故事重新書寫-3.jpg', '最終話-兩人的故事重新書寫-4.jpg', '最終話-兩人的故事重新書寫-5.jpg', '最終話-兩人的故事重新書寫-6.jpg', '最終話-兩人的故事重新書寫-7.jpg', '最終話-兩人的故事重新書寫-8.jpg', '最終話-兩人的故事重新書寫-9.jpg', '最終話-兩人的故事重新書寫-10.jpg', '最終話-兩人的故事重新書寫-11.jpg', '最終話-兩人的故事重新書寫-12.jpg', '最終話-兩人的故事重新書寫-13.jpg', '最終話-兩人的故事重新書寫-14.jpg', '最終話-兩人的故事重新書寫-15.jpg', '最終話-兩人的故事重新書寫-16.jpg', '最終話-兩人的故事重新書寫-17.jpg', '最終話-兩人的故事重新書寫-18.jpg', '最終話-兩人的故事重新書寫-19.jpg', '最終話-兩人的故事重新書寫-20.jpg', '最終話-兩人的故事重新書寫-21.jpg', '最終話-兩人的故事重新書寫-22.jpg', '最終話-兩人的故事重新書寫-23.jpg', '最終話-兩人的故事重新書寫-24.jpg', '最終話-兩人的故事重新書寫-25.jpg']
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。