python怎么把数字字符串排序_python按数字大小排序的方法

Python (3) 2024-07-25 16:23

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

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

发表回复