Если есть несколько расширений, тогда присвойте ранг в словаре, чтобы иметь большую гибкость
my_list = ['/abc/spa/a.log.1.gz',
'/abc/spa/a.log',
'/abc/spa/a.log.30.tar',
'/abc/spa/a.log.30.gz',
'/abc/spa/a.log.2.gz']
rank={'log':1,'gz':2,'tar':3} # 'tar' is optional here
sorted(my_list,key = lambda x : (-rank.get(x.rsplit('.')[-1],0), x),reverse=True)
это даст
['/abc/spa/a.log',
'/abc/spa/a.log.30.gz',
'/abc/spa/a.log.2.gz',
'/abc/spa/a.log.1.gz',
'/abc/spa/a.log.30.tar']
Для вашего обновленного вопроса
my_list = [
'/abc/a.log.1.gz',
'/abc/a.log',
'/abc/a.log.30.gz',
'/abc/a.log.2.gz',
'/abc/a.log.5.gz',
'/abc/a.log.3.gz',
'/abc/a.log.6.gz',
'/abc/a.log.4.gz',
'/abc/a.log.12.gz',
'/abc/a.log.10.gz',
'/abc/a.log.8.gz',
'/abc/a.log.14.gz',
'/abc/a.log.29.gz'
]
rank={'log':1,'gz':2,'tar':3} # 'tar' is optional here
sorted(my_list,key = lambda x : (-rank.get(x.rsplit('.',1)[-1]), int(x.split('.')[-2]) if x.split('.')[-2].isdigit() else 0),reverse=True)
Вывод:
['/abc/a.log',
'/abc/a.log.30.gz',
'/abc/a.log.29.gz',
'/abc/a.log.14.gz',
'/abc/a.log.12.gz',
'/abc/a.log.10.gz',
'/abc/a.log.8.gz',
'/abc/a.log.6.gz',
'/abc/a.log.5.gz',
'/abc/a.log.4.gz',
'/abc/a.log.3.gz',
'/abc/a.log.2.gz',
'/abc/a.log.1.gz']