Найти - Пользователи
Полная версия: Отсортировать номера домов?
Начало » Python для новичков » Отсортировать номера домов?
1 2
dnikitin
есть номера домов
l =

надо отсортировать

как тут ввернуть ключ сортировки?
Lexander
А так же может быть что-то типа 12/3.
Выделяете дом, дробь, буквенный индекс и сортируете по правилам сортировки многомерных массивов.
o7412369815963
эта самая задача уже обсуждалась где-то месяца 2 назад
dnikitin
Я для примера сказал, что это номера домов. У меня дробей никаких нет … а просто буквенный индекс может быть около числа. Городить огород с многомерным списком не хотелось … кажется это неэлегантно. Но попробую. Спасибо.
dnikitin
o7412369815963
эта самая задача уже обсуждалась где-то месяца 2 назад
Вы не вот это имели ввиду? http://python.su/forum/viewtopic.php?id=7412
o7412369815963
dnikitin
o7412369815963
эта самая задача уже обсуждалась где-то месяца 2 назад
Вы не вот это имели ввиду? http://python.su/forum/viewtopic.php?id=7412
нет
Zubchick
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
Совсем бы было классно, чтобы без многомерных массивов и прямо в .order_by() например :)
Zubchick
вообще, чтобы не трахать мозг 2йной сортировкой можно переопределить ключ cmp в той же функции sorted(), это не трудно :)
MapaT
Можно еще и так:
>>> 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']
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB