python排序字符串,结尾为数字

2024-06-26 13:32:24 发布

您现在位置:Python中文网/ 问答频道 /正文

对一个字符串列表进行排序的最简单方法是什么?有些字符串的结尾是数字,有些字符串的结尾是3位,有些字符串的结尾是4位:

>>> list = ['asdf123', 'asdf1234', 'asdf111', 'asdf124']
>>> list.sort()
>>> print list
['asdf111', 'asdf123', 'asdf1234', 'asdf124']

应该把1234放在最后。有什么简单的方法可以做到这一点吗?


Tags: 方法字符串列表排序结尾数字sortlist
3条回答
l = ['asdf123', 'asdf1234', 'asdf111', 'asdf124']
l.sort(cmp=lambda x,y:cmp(int(x[4:]), int(y[4:]))

is there an easy way to do this?

没有

完全不清楚真正的规则是什么。“有些有3位,有些有4位”并不是一个非常精确或完整的规范。所有的例子都在数字前面显示4个字母。这总是真的吗?

import re
key_pat = re.compile(r"^(\D+)(\d+)$")
def key(item):
    m = key_pat.match(item)
    return m.group(1), int(m.group(2))

这个key函数可以做您想要的事情。或者可能太复杂了。或者模式是真正的r"^(.*)(\d{3,4})$",或者规则更加模糊。

>>> data= ['asdf123', 'asdf1234', 'asdf111', 'asdf124']
>>> data.sort( key=key )
>>> data
['asdf111', 'asdf123', 'asdf124', 'asdf1234']

is there an easy way to do this?

是的

您可以使用natsort模块。

>>> from natsort import natsorted
>>> natsorted(['asdf123', 'asdf1234', 'asdf111', 'asdf124'])
['asdf111', 'asdf123', 'asdf124', 'asdf1234']

完全公开,我是包的作者。

相关问题 更多 >