Форум сайта python.su
0
Спасибо за наглядный тест производительности разных способов :)
При работе с большими списками обязательно буду пользоваться вариантом с count.
Офлайн
52
Mozart, да дело не (только) в скорости. Вы посмотрите хотя бы ЧТО вы передаёте в функцию и ЧТО и КАК вы там используете. Надо учиться писать хороший код с самого начала пути, чтобы потом в подобных примерах вам даже в голову не пришло бы пересчитывать максимальный элемент массива или менять массив при итерации по нему.
Ну и сама конструкция, не беря в расчет алгоритмическую сложность, отвратительна, тут даже обсуждать нечего. Создание функции для её однократного вызова в месте её создания, да ещё и с передачей неиспользуемого параметра, использованием глобальной переменной и дублированием названий переменных, - это насилие над программистским разумом.
Отредактировано fata1ex (Авг. 29, 2012 13:46:45)
Офлайн
0
Спасибо за критику, теперь буду более внимателен в своих действиях и смотреть в перспективу на улучшение общей производительности программы. Действительно, мой вариант оказался очень плохим при работе с большими списками, сейчас сам проверил и разница в скорости вычислений видна невооруженным глазом и без бенчмарков.
Ошибка, как я понял, у меня была в том, что функция пересчитывала весь список для каждого элемента этой же функции, т.е. например для величины списка в 10000 элементов общее количество действий выходит 10000 * 10000 против 10000 * 2 (для вычисления max и для вычисления count(max))
Сейчас я учел эту ошибку и сделал вот так:
a=[ ... ]
(lambda x: [max(x)] * x.count(max(x))) (a)
a = [ ... ]
a = [b.append(x) for x in a if x == max(a)]
Офлайн
568
Блин, Моцарт,
[max(a)] * a.count(max(a))
Отредактировано FishHook (Авг. 29, 2012 14:33:31)
Офлайн
52
Mozart lambda используется в 99% случаев для передачи самой себя в другую функцию. Например, в map или filter. Сама по себе она практически не нужна.
Офлайн
568
Еще, решение, проверь на скорость ели хочешь, мне лень
a = [1,2,3,4,5,6,6,6,6,0,1,5] a.sort() print a[a.index(a[-1]):]
Отредактировано FishHook (Авг. 29, 2012 14:40:52)
Офлайн