dnikitin
Июнь 8, 2010 17:09:26
есть номера домов
l =
надо отсортировать
как тут ввернуть ключ сортировки?
Lexander
Июнь 8, 2010 18:23:38
А так же может быть что-то типа 12/3.
Выделяете дом, дробь, буквенный индекс и сортируете по правилам сортировки многомерных массивов.
o7412369815963
Июнь 8, 2010 18:33:32
эта самая задача уже обсуждалась где-то месяца 2 назад
dnikitin
Июнь 8, 2010 19:20:36
Я для примера сказал, что это номера домов. У меня дробей никаких нет … а просто буквенный индекс может быть около числа. Городить огород с многомерным списком не хотелось … кажется это неэлегантно. Но попробую. Спасибо.
dnikitin
Июнь 8, 2010 20:19:17
o7412369815963
эта самая задача уже обсуждалась где-то месяца 2 назад
Вы не вот это имели ввиду?
http://python.su/forum/viewtopic.php?id=7412
o7412369815963
Июнь 8, 2010 20:22:37
dnikitin
o7412369815963
эта самая задача уже обсуждалась где-то месяца 2 назад
Вы не вот это имели ввиду? http://python.su/forum/viewtopic.php?id=7412
нет
Zubchick
Июнь 8, 2010 20:47:57
l = ['2', '1a', '11a', '1', '11', '1b', '11c', '11d']
def splitter(str):
number = []
for i in str:
if i.isdigit():
number.append(i)
else:
break
ret = ''.join(number)
return int(ret), str.lstrip(ret)
print sorted(sorted(map(splitter, l), key = lambda x: x[1]), key = lambda x: x[0])
вроде работает :)
Пришлось правда 2 раза сортировать
Lolka
Июнь 8, 2010 20:50:50
Совсем бы было классно, чтобы без многомерных массивов и прямо в .order_by() например :)
Zubchick
Июнь 8, 2010 20:59:05
вообще, чтобы не трахать мозг 2йной сортировкой можно переопределить ключ cmp в той же функции sorted(), это не трудно :)
MapaT
Июнь 8, 2010 21:41:02
Можно еще и так:
>>> l = ['2', '1a', '11a', '1', '11', '1b', '11c', '11d']
>>> import re
>>> def srt(s):
mo = re.match(r'(\d+)(\w*)', s)
return int(mo.group(1)), mo.group(2)
>>> l.sort(key=srt)
>>> l
['1', '1a', '1b', '2', '11', '11a', '11c', '11d']