【问题标题】:How to sort a python list of strings which contain a number in the end如何对最后包含数字的字符串的python列表进行排序
【发布时间】:2018-04-19 10:17:21
【问题描述】:

我有一个包含字符串的 python 列表,但每个字符串的最后一部分都有一个数字。我需要以数字升序的方式对该列表进行排序:

[u'TC DUMAZILE. Warning n.12', u'TC DUMAZILE. Warning n.4', u'TC DUMAZILE. Warning n.8', u'TC ELEVEN. Warning n.1', u'TC ELIAKIM. Warning n.10', u'TC ELIAKIM. Warning n.14', u'TC ELIAKIM. Warning n.2', u'TC ELIAKIM. Warning n.6', u'TC HOLA. Warning n.4', u'TC HOLA. Warning n.8', u'TC TWELVE. Warning n.1']

我使用了 sorted() 函数,它按字母顺序对名称进行排序,但它没有考虑每个字符串最后一部分的数字。

【问题讨论】:

  • 使用key参数到函数sorted

标签: python list sorting


【解决方案1】:

一种方法是将sortedkey 参数和自定义lambda 函数一起使用。

这里我们需要用.分割,取最后一项,转换成int

lst = [u'TC DUMAZILE. Warning n.12', u'TC DUMAZILE. Warning n.4', u'TC DUMAZILE. Warning n.8', u'TC ELEVEN. Warning n.1', u'TC ELIAKIM. Warning n.10', u'TC ELIAKIM. Warning n.14', u'TC ELIAKIM. Warning n.2', u'TC ELIAKIM. Warning n.6', u'TC HOLA. Warning n.4', u'TC HOLA. Warning n.8', u'TC TWELVE. Warning n.1']

res = sorted(lst, key=lambda x: int(x.rsplit('.', 1)[-1]))

# ['TC ELEVEN. Warning n.1',
#  'TC TWELVE. Warning n.1',
#  'TC ELIAKIM. Warning n.2',
#  'TC DUMAZILE. Warning n.4',
#  'TC HOLA. Warning n.4',
#  'TC ELIAKIM. Warning n.6',
#  'TC DUMAZILE. Warning n.8',
#  'TC HOLA. Warning n.8',
#  'TC ELIAKIM. Warning n.10',
#  'TC DUMAZILE. Warning n.12',
#  'TC ELIAKIM. Warning n.14']

如果需要先按整数排序,再按字符串开头部分的字母顺序:

def sorter_func(x):
    y = x.split('.')
    return int(y[-1]), y[0]

res = sorted(lst, key=sorter_func)

# ['TC ELEVEN. Warning n.1',
#  'TC TWELVE. Warning n.1',
#  'TC ELIAKIM. Warning n.2',
#  'TC DUMAZILE. Warning n.4',
#  'TC HOLA. Warning n.4',
#  'TC ELIAKIM. Warning n.6',
#  'TC DUMAZILE. Warning n.8',
#  'TC HOLA. Warning n.8',
#  'TC ELIAKIM. Warning n.10',
#  'TC DUMAZILE. Warning n.12',
#  'TC ELIAKIM. Warning n.14']

相关:Nested lambda statements when sorting lists

【讨论】:

    【解决方案2】:
    import re
    
    regex = re.compile('([0-9]+)$')
    
    l = [u'TC DUMAZILE. Warning n.12', u'TC DUMAZILE. Warning n.4', u'TC DUMAZILE. Warning n.8', u'TC ELEVEN. Warning n.1', u'TC ELIAKIM. Warning n.10', u'TC ELIAKIM. Warning n.14', u'TC ELIAKIM. Warning n.2', u'TC ELIAKIM. Warning n.6', u'TC HOLA. Warning n.4', u'TC HOLA. Warning n.8', u'TC TWELVE. Warning n.1']
    
    print(sorted(l,key=lambda i: int(regex.search(i).groups()[0])))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 2022-11-23
      • 2015-08-07
      • 1970-01-01
      • 2016-01-23
      相关资源
      最近更新 更多