如何通过数值对此列表进行排序?是否需要删除数字的正则表达式,还是有更多的Pythonic方法来执行此操作?
to_sort
['12-foo',
'1-bar',
'2-bar',
'foo-11',
'bar-3',
'foo-4',
'foobar-5',
'6-foo',
'7-bar']
所需的输出如下:
1-bar
2-bar
bar-3
foo-4
foobar-5
6-foo
7-bar
foo-11
12-foo
答案 0 :(得分:10)
一种解决方案是以下正则表达式提取:
sorted(l, key=lambda x: int(re.search('\d+', x).group(0)))
>>> l
['12-foo', '1-bar', '2-bar', 'foo-11', 'bar-3', 'foo-4', 'foobar-5', '6-foo', '7-bar']
>>> sorted(l, key=lambda x: int(re.search('\d+', x).group(0)))
['1-bar', '2-bar', 'bar-3', 'foo-4', 'foobar-5', '6-foo', '7-bar', 'foo-11', '12-foo']
key
是提取的数字(转换为int
以避免按字母顺序排序)。
答案 1 :(得分:4)
如果您不想使用正则表达式
>>> l = ['12-foo', '1-bar', '2-bar', 'foo-11', 'bar-3', 'foo-4', 'foobar-5', '6-foo', '7-bar']
>>> sorted(l, key = lambda x: int(''.join(filter(str.isdigit, x))))
['1-bar', '2-bar', 'bar-3', 'foo-4', 'foobar-5', '6-foo', '7-bar', 'foo-11', '12-foo']