Пока нашел время ответить, уже сделали, но не пропадать же:
# -*- encoding: utf-8 -*-
import re
ls = [u'57А', u'51', u'1', u'1/9', u'12', u'14', u'15', u'15 к2', u'18',
'19', u'2/4', u'22', u'22А', u'23', u'24', u'25', u'25 к2', u'26',
'28', u'3', u'32', u'36/34', u'37', u'38', u'40', u'41', u'42', u'43', u'44',
u'45/7 к2', u'45/7', u'46', u'47/8', u'48/7', u'49', u'53А', u'55',
'59', u'59А', u'6/3', u'7/9', u'72', u'8/6', u'80', u'82']
class SortHash:
RE = re.compile(r'(\d+)|([^\d\s\/]+)')
def __call__(self, s):
def adjust(s):
try:
return int(s)
except ValueError:
return s
return tuple(adjust(x.group()) for x in self.RE.finditer(s.upper()))
for x in sorted(ls, key=SortHash()):
print x