Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 9, 2013 08:39:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Помогите отсортировать

sergeek
но ведь не гоже благородному дону выполнять работу машины. Вдруг там таких хренек очень много?
prefs вынесено в отдельный этап и задаёт порядок
этот этап совершенно независим, загрузка может проводиться из файла

sergeek
в третьем оказывается убрали аргумент с функцией на сравнение в сортировке
это где убрали ?
>>> print(sorted.__doc__, list.sort.__doc__, sep='\n')
sorted(iterable, key=None, reverse=False) --> new sorted list
L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
>>>

sergeek
v_rezultate = ', '.join([', '.join(sorted(g,key=num_key)) for k,g in groupby(sorted(stroka.split(', '),key=name_key),key=name_key)])
v_rezultate
попробуй сделать import this в интерпретаторе



Офлайн

#2 Янв. 9, 2013 08:56:20

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Помогите отсортировать

sergeek
но ведь не гоже благородному дону выполнять работу машины. Вдруг там таких хренек очень много?
Если благородный дон проявит инициативу, то он с легкостью найдет топик, в котором обсуждался выбор уникальных значений последовательности с сохранением порядка следования :)
import re
LITERALS = re.compile(r"\D+")
s = 'WTS1234, ACDW485, WTS72, SHR728, ACDW14, SHR16, WTS16'
def _unique(iterable):
    seen = set()
    return (x for x in iterable if x not in seen and not seen.add(x))
out = []
# код py.user.next
for pref in _unique(LITERALS.search(_).group() for _ in s.split(", ")):
    lst = re.findall(pref + r'\d+', s)
    lst.sort(key=lambda i: int(re.search(r'\d+', i).group()))
    out.extend(lst)
sout = ', '.join(out) 
 
print(s)
print(sout)



Офлайн

#3 Янв. 9, 2013 09:14:23

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Помогите отсортировать

py.user.next
prefs вынесено в отдельный этап и задаёт порядок, этот этап совершенно независим, загрузка может проводиться из файла
порядок неизвестен же. Если бы тсу понадобилось отсортировать 7 элементов он бы наверно сделал это руками. Стало быть велика веротность что таких элементов много или вообще неизвестно. А в таком случае делать часть сортировки вручную неприемлемо
py.user.next
это где убрали ?
это функция для доступа по ключу а не на сравнение. Я про cmp
http://docs.python.org/2/library/functions.html#sorted
http://docs.python.org/3/library/functions.html#sorted

Офлайн

#4 Янв. 9, 2013 09:55:06

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Помогите отсортировать

def _unique(iterable):
    seen = set()
    return (x for x in iterable if x not in seen and not seen.add(x))
ну это же совсем некрасиво - делать в компрехеншене какие то сайд эффекты
особенно вот это
and not seen.add(x))
то есть должно быть как бы условием по которому генерируется итератор но на самом деле это костыль с помощью которого добавляется элемент в множество чтобы работала первая часть условия.
есть же set comprehension
def _unique(iterable):
    return {x for x in iterable}

Офлайн

#5 Янв. 9, 2013 12:12:07

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Помогите отсортировать

sergeek
есть же …
Вы не внимательны, необходимо не только отобрать уникальные элементы, но и сохранить порядок следования



Офлайн

#6 Янв. 9, 2013 12:22:36

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Помогите отсортировать

pyuser
да, но все равно это не изменяет того факта что та конструкция уродлива лучше же добавить 1-2 строки. И повторюсь, про порядок следования у тса ни слова.
А впрочем, может и нужен был этот порядок

Отредактировано sergeek (Янв. 9, 2013 12:27:46)

Офлайн

#7 Янв. 9, 2013 12:26:40

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Помогите отсортировать

pyuser
выбор уникальных значений последовательности с сохранением порядка следования
это откуда взято ?
то, что оно совпало, ещё ни о чём не говорит

sergeek
порядок неизвестен же. Если бы тсу понадобилось отсортировать 7 элементов он бы наверно сделал это руками. Стало быть велика веротность что таких элементов много или вообще неизвестно. А в таком случае делать часть сортировки вручную неприемлемо
не, она конкретно написала, что по буквам оно должно быть отсортировано так, а по числам - по возрастанию
и последовательность эта может браться из файла, который создаётся другим скриптом

sergeek
это функция для доступа по ключу а не на сравнение. Я про cmp
а, ну и правильно, что убрали, - это же очередной эксперимент по типу “что из них больше приживётся”



Отредактировано py.user.next (Янв. 9, 2013 12:26:52)

Офлайн

#8 Янв. 9, 2013 12:43:01

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Помогите отсортировать

py.user.next
не, она конкретно написала, что по буквам оно должно быть отсортировано так, а по числам - по возрастаниюи последовательность эта может браться из файла, который создаётся другим скриптом
я про то, скорее всего у тса исходная строка побольше, то есть, в
prefs = ('WTS', 'ACDW', 'SHR')
придется добавлять этого руками(если вообще заранее известно что добавлять). Если же она именно такая, тогда уже проще будет написать
def otsortirovat(stroku):
    return "WTS16, WTS72, WTS1234, ACDW14, ACDW485, SHR16, SHR728"
Ну это если оно конечно для какой-то практической цели. Если нет и порядок именно тот (что лишено смысла), то тогда я был не прав, да

Офлайн

#9 Янв. 9, 2013 13:01:26

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Помогите отсортировать

В принципе, тот уродский код, что я привел, так и сортирует, как тс просил: не трогая сортировку по буквам, группирует их по цифрам. Я тогда внимательно просмотрел начальный и конечный пример и увидел именно такую закономерность: скажем если XWD25 шло раньше AMD11, то сначала будут все XWD, а после все AMD. Нет?

Офлайн

#10 Янв. 9, 2013 13:38:52

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Помогите отсортировать

dimy44
Нет?
да, только возможно это была случайность И предлагаю закрыть уже тему, так как полные условия задачи от тса получены не были, а гадать не стоит.
уродский код
зря недооцениваешь (или показываешь что недооцениваешь) себя, по мне он как раз таки самый правильный. Зря все таки убрали cmp, не городить же классы или то что у меня ради такой вот сортировки.

Отредактировано sergeek (Янв. 9, 2013 13:39:19)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version