我有一个文件名列表:
a = ['data_1-0.hamster.raw',
'data_0-0.hamster.raw',
'data_9-1.hamster.raw',
'data_2-0.hamster.raw',
'data_0-1.hamster.raw',
'data_0-10.hamster.raw',
'data_0-2.hamster.raw']我想对这个列表进行排序,这样我就有了这样的输出:
a = ['data_0-0.hamster.raw',
'data_0-1.hamster.raw',
'data_0-2.hamster.raw',
'data_0-10.hamster.raw',
'data_1-0.hamster.raw',
'data_2-0.hamster.raw',
'data_9-1.hamster.raw']这就是我做的代码:
sorted(a, key=lambda f: int(re.search(r'-(\d+)[^-]*$', f).group(1)))但我对re语法有点困惑,这就是我所得到的:
a = ['data_1-0.hamster.raw',
'data_0-0.hamster.raw',
'data_2-0.hamster.raw',
'data_9-1.hamster.raw',
'data_0-1.hamster.raw',
'data_0-2.hamster.raw',
'data_0-10.hamster.raw']它似乎是为连字符后面的数字做的,而不是为第一个数字做的。
发布于 2018-11-12 21:56:30
你可以这样做:
import re
pattern = re.compile('data_(\d+)-(\d+)')
a = ['data_1-0.hamster.raw',
'data_0-0.hamster.raw',
'data_9-1.hamster.raw',
'data_2-0.hamster.raw',
'data_0-1.hamster.raw',
'data_0-10.hamster.raw',
'data_0-2.hamster.raw']
result = sorted(a, key=lambda s: tuple(map(int, pattern.search(s).groups())))
print(result)输出
['data_0-0.hamster.raw', 'data_0-1.hamster.raw', 'data_0-2.hamster.raw', 'data_0-10.hamster.raw', 'data_1-0.hamster.raw', 'data_2-0.hamster.raw', 'data_9-1.hamster.raw']发布于 2018-11-12 21:57:17
这个排序键可能应该作为一个常规函数来编写。
import re
def sortkey(string):
numbering = re.search('\d+-\d+', string).group()
first, second = map(int, numbering.split('-'))
return first, second演示:
>>> a = ['data_1-0.hamster.raw',
...: 'data_0-0.hamster.raw',
...: 'data_9-1.hamster.raw',
...: 'data_2-0.hamster.raw',
...: 'data_0-1.hamster.raw',
...: 'data_0-10.hamster.raw',
...: 'data_0-2.hamster.raw']
...:
>>> sorted(a, key=sortkey)
>>>
['data_0-0.hamster.raw',
'data_0-1.hamster.raw',
'data_0-2.hamster.raw',
'data_0-10.hamster.raw',
'data_1-0.hamster.raw',
'data_2-0.hamster.raw',
'data_9-1.hamster.raw']发布于 2018-11-12 21:56:23
使用.sort()函数
a = ['data_1-0.hamster.raw',
'data_0-0.hamster.raw',
'data_9-1.hamster.raw',
'data_2-0.hamster.raw',
'data_0-1.hamster.raw',
'data_0-10.hamster.raw',
'data_0-2.hamster.raw']
a.sort()https://stackoverflow.com/questions/53270645
复制相似问题