Вот еще более питонская версия ответа Марка Байера:
import re
def natural_sort_key(s, _nsre=re.compile('([0-9]+)')):
return [int(text) if text.isdigit() else text.lower()
for text in re.split(_nsre, s)]
Теперь эта функция может использоваться как ключ в любой функции, которая ее использует, например list.sort
, sorted
, max
и т. д.
В качестве лямбда:
lambda s: [int(t) if t.isdigit() else t.lower() for t in re.split('(\d+)', s)]