Можно и так. Но это потребует преобразования трёх числел в ASCII строки, склеивания и парсирования полученной строки в число. Не очень накладно, но всё же операции string<->int - это, как минимум, циклы. С позиции дотошного оптимизатора это всё-таки затратнее для железки, чем простая арифметика.Serguei666 wrote: ↑20 Nov 2017 04:03А почему просто не возвращать конвертированное в int строчное значение даты в формате YYYYMMDD?helg wrote: ↑19 Nov 2017 23:47 В случае key() у алгоритма сортировки сильно больше возможностей для оптимизации процесса, чем в случае cmp().
Доб. В рассматриваемом случае я бы сделал примерно так (чтобы не задумываться: с нуля нам отсчёт или с единицы)
key = (13*(year-1900) + month)*32 + day
целые числа и готовятся и сравниваются быстрее, чем строки.
Сортировка в Python 3
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: Сортировка в Python 3
-
- Уже с Приветом
- Posts: 17538
- Joined: 15 Aug 2002 00:39
- Location: Maryland
Re: Сортировка в Python 3
А вот тут давайте поподробнее. Поскольку:helg wrote: ↑20 Nov 2017 03:27Да в этом питоне сортируются не только овеществлённые коллекции, но и вполне себе виртуальные, сгенерированные. Метрики генераторов, особенно тривиальных, коих так много в питонокоде, известны безо всяких проходов по элементам. Да и лямбды для key() обычно тоже немудрёные, так что оптимизатор может их понять. А раз всё известно заранее, можно выбрать правильный алгоритм сортировки. Более того, оптимизатор может даже решить, что не надо громоздить паровоз из генератора и сортировщика, а достаточно просто воткнуть какой параметр в существующий генератор.
1. Лямбды в Питоне нетривиальными не бывают. Они все вида "x:return действие над х", потому вопрос с оптимизатором подвисает в воздухе.
2. Я больше чем уверен, что алгоритм сортировки один на все случаи жизни.
3. Генераторы, AFAIK, в сортировках недопустимы в принципе, по крайней мере в виде key=XXX функции.
Я не не верю, я не понимаю, к чему это тут вообще. Это вообще к делу не относится, ИМО. Мы говорили о "троичном" флаге, Вы сказали о полутора битах. При чем тут возвращаемое 64-битовое число? С какого оно тут бока?
Нет, категорически. Переменная в нетипизированном языке типа Перла или Питона совсем не просто 64 int, это объекты (хэши), что подтверждается значениями типа None or undef. У Python так и вовсе парадигма "все есть объект". Отсюда и совершенно идиотские конструкции объединения массиваhelg wrote: ↑20 Nov 2017 04:13Можно и так. Но это потребует преобразования трёх числел в ASCII строки, склеивания и парсирования полученной строки в число. Не очень накладно, но всё же операции string<->int - это, как минимум, циклы. С позиции дотошного оптимизатора это всё-таки затратнее для железки, чем простая арифметика.Serguei666 wrote: ↑20 Nov 2017 04:03 А почему просто не возвращать конвертированное в int строчное значение даты в формате YYYYMMDD?
Code: Select all
','.join(list)
Не задираться, а то съем!..
-
- Уже с Приветом
- Posts: 1494
- Joined: 08 Mar 2002 10:01
- Location: NJ
Re: Сортировка в Python 3
year*10000 + month*100 + dayhelg wrote: ↑20 Nov 2017 04:13Можно и так. Но это потребует преобразования трёх числел в ASCII строки, склеивания и парсирования полученной строки в число. Не очень накладно, но всё же операции string<->int - это, как минимум, циклы. С позиции дотошного оптимизатора это всё-таки затратнее для железки, чем простая арифметика.Serguei666 wrote: ↑20 Nov 2017 04:03А почему просто не возвращать конвертированное в int строчное значение даты в формате YYYYMMDD?helg wrote: ↑19 Nov 2017 23:47 В случае key() у алгоритма сортировки сильно больше возможностей для оптимизации процесса, чем в случае cmp().
Доб. В рассматриваемом случае я бы сделал примерно так (чтобы не задумываться: с нуля нам отсчёт или с единицы)
key = (13*(year-1900) + month)*32 + day
целые числа и готовятся и сравниваются быстрее, чем строки.
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Сортировка в Python 3
Ещё раз - а чего мешает tuple вернуть - year, month, day?ALV00 wrote: ↑20 Nov 2017 21:49year*10000 + month*100 + dayhelg wrote: ↑20 Nov 2017 04:13Можно и так. Но это потребует преобразования трёх числел в ASCII строки, склеивания и парсирования полученной строки в число. Не очень накладно, но всё же операции string<->int - это, как минимум, циклы. С позиции дотошного оптимизатора это всё-таки затратнее для железки, чем простая арифметика.Serguei666 wrote: ↑20 Nov 2017 04:03А почему просто не возвращать конвертированное в int строчное значение даты в формате YYYYMMDD?helg wrote: ↑19 Nov 2017 23:47 В случае key() у алгоритма сортировки сильно больше возможностей для оптимизации процесса, чем в случае cmp().
Доб. В рассматриваемом случае я бы сделал примерно так (чтобы не задумываться: с нуля нам отсчёт или с единицы)
key = (13*(year-1900) + month)*32 + day
целые числа и готовятся и сравниваются быстрее, чем строки.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 1494
- Joined: 08 Mar 2002 10:01
- Location: NJ
Re: Сортировка в Python 3
Я думаю, по большому счету пофиг. Лишние несколько операций с памятью рояля не сыграют.
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Сортировка в Python 3
Ну, с таким буддистским подходом, да. Безусловно. У настоящего программиста программа на любом языке должна выглядеть, как программа на Фортране Брейнфаке
А в соседней теме, вон, пишут, что "индусский говнокод" кому-то не нравится.
Мир Украине. Свободу России.