Python排序以数字开头的字符串

2024-04-20 08:22:43 发布

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

我有下一个列表:

a = ['1th Word', 'Another Word', '10th Word']
print a.sort()
>>> ['10th Word', '1th Word', 'Another Word']

但我需要:

^{2}$

有没有一个简单的方法可以做到这一点?在

我试过了:

r = re.compile(r'(\d+)')
def sort_by_number(s):
    m = r.match(s)
    return m.group(0)

x.sort(key=sort_by_number)

但是有些字符串没有数字,这会导致错误。 谢谢。在


Tags: 方法keyrenumber列表byreturndef
3条回答

这是一个适用于一般情况的函数

import re
def natkey(s):
    return [int(p) if p else q for p, q in re.findall(r'(\d+)|(\D+)', s)]

x = ['1th Word', 'Another Word 2x', 'Another Word 20x', '10th Word 10', '2nd Word']

print sorted(x)
print sorted(x, key=natkey)

结果:

^{pr2}$
r = re.compile(r'(\d+)')
def sort_by_number(s):
    m = r.match(s)
    return m and m.group(0) or s

x.sort(key=sort_by_number)

关键是如果不匹配,则按原样返回字符串

相关问题 更多 >