美文网首页
Python-数字字符串排序

Python-数字字符串排序

作者: 冲锋丘丘人 | 来源:发表于2021-02-05 23:15 被阅读0次

    一、前言

    列表排序基础:https://www.jianshu.com/p/44d4924744cb
    列表的字符串包含数字,直接使用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']
    
    print(sorted(list2, key=lambda info: int(info[0:-4])))
    
    #数字在右边,关注字符串截取
    your_list = ["a1", "a2", "a10", "b2", "b1"]
    #新增传参key,类型为元组,对字符串分组处理,按照元组的两个值排序
    print(sorted(your_list, key=lambda info: (info[0], int(info[1:]))))
    #直接按数字排序
    print(sorted(your_list, key=lambda info: 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']
    ['a1', 'b1', 'a2', 'b2', 'a10']
    

    四、字符串两边都有数字

    字符串两边都是数字,用索引处理就很难了,需要用到正则表达式,提取数字进行排序

    import re
    zh_list = ['故事-0.jpg', '故事-1.jpg', '故事重-10.jpg','故事重-13.jpg','故事重-3.jpg','故事重-4.jpg']
    #用正则表达式提取数字排序
    print(sorted(zh_list, key=lambda info: (int(re.findall(r'-(\d+).jpg', info)[0]))))
    my_par = re.compile(r'-(\d+).jpg')
    print(sorted(zh_list, key=lambda info: int(my_par.findall(info)[0])))
    #输出
    ['故事-0.jpg', '故事-1.jpg', '故事重-3.jpg', '故事重-4.jpg', '故事重-10.jpg', '故事重-13.jpg']
    ['故事-0.jpg', '故事-1.jpg', '故事重-3.jpg', '故事重-4.jpg', '故事重-10.jpg', '故事重-13.jpg']
    

    相关文章

      网友评论

          本文标题:Python-数字字符串排序

          本文链接:https://www.haomeiwen.com/subject/qzlatltx.html