Если вы хотите, чтобы они сортировали их по int значению , вы можете использовать regex следующим образом:
import re
nfiles = ['testdat_2014-12-31-21_H1.nc',
'testdat_2014-12-31-21_H10.nc',
'testdat_2014-12-31-21_H11.nc',
'testdat_2014-12-31-21_H12.nc',
'testdat_2014-12-31-21_H2.nc',
'testdat_2014-12-31-21_H3.nc',
'testdat_2014-12-31-21_H4.nc',
'testdat_2014-12-31-21_H5.nc',
'testdat_2014-12-31-21_H6.nc',
'testdat_2014-12-31-21_H7.nc',
'testdat_2014-12-31-21_H8.nc',
'testdat_2014-12-31-21_H9.nc']
result = sorted(nfiles, key=lambda x: int(re.search('H(\d+)\.nc', x).group(1)))
print(result)
выход
['testdat_2014-12-31-21_H1.nc', 'testdat_2014-12-31-21_H2.nc', 'testdat_2014-12-31-21_H3.nc', 'testdat_2014-12-31-21_H4.nc', 'testdat_2014-12-31-21_H5.nc', 'testdat_2014-12-31-21_H6.nc', 'testdat_2014-12-31-21_H7.nc', 'testdat_2014-12-31-21_H8.nc', 'testdat_2014-12-31-21_H9.nc', 'testdat_2014-12-31-21_H10.nc', 'testdat_2014-12-31-21_H11.nc', 'testdat_2014-12-31-21_H12.nc']
Объяснение
Шаблон 'H(\d+)\.nc'
означает совпадение с любой группой цифр (\d+)
, перед которой стоит H
, за которой следует .nc
. и используйте .group(1)
, чтобы получить группу цифр. Затем преобразуйте группы цифр в int
и используйте их в качестве ключа для сортировки.
Нет регулярных выражений
Если вы хотите вообще отказаться от регулярных выражений, используйте в качестве клавиши следующую функцию:
def key(element):
digits = (ix for ix in element.split('_')[-1] if ix.isdigit())
return int(''.join(digits))
result = sorted(nfiles, key=key)
print(result)
Примечание
Наконец, если вы хотите отсортировать по строковому значению, просто удалите вызовы функции int.