繁体   English   中英

如何对python字符串列表进行排序,字符串末尾包含数字

[英]How to sort a python list of strings which contain a number in the end

我有一个包含字符串的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和自定义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']

相关: 排序列表时嵌套的lambda语句

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM