如何通过数值对此列表进行排序?是正则表达式需要删除数字还是有更多的Pythonic方法来做到这一点?
to_sort
['12-foo',
'1-bar',
'2-bar',
'foo-11',
'bar-3',
'foo-4',
'foobar-5',
'6-foo',
'7-bar']
Run Code Online (Sandbox Code Playgroud)
期望的输出如下:
1-bar
2-bar
bar-3
foo-4
foobar-5
6-foo
7-bar
foo-11
12-foo
Run Code Online (Sandbox Code Playgroud)
Mar*_*oun 10
一种解决方案是以下正则表达式提取:
sorted(l, key=lambda x: int(re.search('\d+', x).group(0)))
Run Code Online (Sandbox Code Playgroud)
>>> 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']
Run Code Online (Sandbox Code Playgroud)
的key是所提取的数位(转换为int避免lexographically排序).
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |