Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 8, 2010 17:09:26

dnikitin
От:
Зарегистрирован: 2010-06-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Отсортировать номера домов?

есть номера домов
l =

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

как тут ввернуть ключ сортировки?



Офлайн

#2 Июнь 8, 2010 18:23:38

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Отсортировать номера домов?

А так же может быть что-то типа 12/3.
Выделяете дом, дробь, буквенный индекс и сортируете по правилам сортировки многомерных массивов.



Офлайн

#3 Июнь 8, 2010 18:33:32

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Отсортировать номера домов?

эта самая задача уже обсуждалась где-то месяца 2 назад

Офлайн

#4 Июнь 8, 2010 19:20:36

dnikitin
От:
Зарегистрирован: 2010-06-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Отсортировать номера домов?

Я для примера сказал, что это номера домов. У меня дробей никаких нет … а просто буквенный индекс может быть около числа. Городить огород с многомерным списком не хотелось … кажется это неэлегантно. Но попробую. Спасибо.



Офлайн

#5 Июнь 8, 2010 20:19:17

dnikitin
От:
Зарегистрирован: 2010-06-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Отсортировать номера домов?

o7412369815963
эта самая задача уже обсуждалась где-то месяца 2 назад
Вы не вот это имели ввиду? http://python.su/forum/viewtopic.php?id=7412



Офлайн

#6 Июнь 8, 2010 20:22:37

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Отсортировать номера домов?

dnikitin
o7412369815963
эта самая задача уже обсуждалась где-то месяца 2 назад
Вы не вот это имели ввиду? http://python.su/forum/viewtopic.php?id=7412
нет

Офлайн

#7 Июнь 8, 2010 20:47:57

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Отсортировать номера домов?

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 раза сортировать



Офлайн

#8 Июнь 8, 2010 20:50:50

Lolka
От:
Зарегистрирован: 2007-09-29
Сообщения: 128
Репутация: +  0  -
Профиль   Отправить e-mail  

Отсортировать номера домов?

Совсем бы было классно, чтобы без многомерных массивов и прямо в .order_by() например :)



Офлайн

#9 Июнь 8, 2010 20:59:05

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Отсортировать номера домов?

вообще, чтобы не трахать мозг 2йной сортировкой можно переопределить ключ cmp в той же функции sorted(), это не трудно :)



Офлайн

#10 Июнь 8, 2010 21:41:02

MapaT
От:
Зарегистрирован: 2008-12-07
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Отсортировать номера домов?

Можно еще и так:

>>> 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']



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version