Python 按字符串末尾数字排序
如何简单地对一串字符串进行排序,这些字符串的末尾有数字,有的有3位数,有的有4位数:
>>> list = ['asdf123', 'asdf1234', 'asdf111', 'asdf124']
>>> list.sort()
>>> print list
['asdf111', 'asdf123', 'asdf1234', 'asdf124']
应该把那个1234的放到最后。有没有简单的方法可以做到这一点?
8 个回答
22
有没有简单的方法可以做到这一点?
有的
你可以使用 natsort 这个模块。
>>> from natsort import natsorted
>>> natsorted(['asdf123', 'asdf1234', 'asdf111', 'asdf124'])
['asdf111', 'asdf123', 'asdf124', 'asdf1234']
坦白说,我是这个软件包的作者。
7
有没有简单的方法可以做到这一点?
没有
现在的规则完全不清楚。“有的有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']