python排序结尾的数字字符串

cro*_*red 8 python sorting string natural-sort

什么是最简单的方法来排序字符串列表在末尾有一些数字有3位数,有些有4位数:

>>> list = ['asdf123', 'asdf1234', 'asdf111', 'asdf124']
>>> list.sort()
>>> print list
['asdf111', 'asdf123', 'asdf1234', 'asdf124']
Run Code Online (Sandbox Code Playgroud)

应该把1234一个放在最后.是否有捷径可寻?

Set*_*ton 11

是否有捷径可寻?

您可以使用natsort模块.

>>> from natsort import natsorted
>>> natsorted(['asdf123', 'asdf1234', 'asdf111', 'asdf124'])
['asdf111', 'asdf123', 'asdf124', 'asdf1234']
Run Code Online (Sandbox Code Playgroud)

完全披露,我是包的作者.


S.L*_*ott 6

是否有捷径可寻?

没有

完全不清楚真正的规则是什么."有些有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))
Run Code Online (Sandbox Code Playgroud)

key功能可能会做你想要的.或者它可能太复杂了.或者这种模式可能真的r"^(.*)(\d{3,4})$"或者说规则更加模糊.

>>> data= ['asdf123', 'asdf1234', 'asdf111', 'asdf124']
>>> data.sort( key=key )
>>> data
['asdf111', 'asdf123', 'asdf124', 'asdf1234']
Run Code Online (Sandbox Code Playgroud)