Найти - Пользователи
Полная версия: Удаление элементов списка
Начало » Python для новичков » Удаление элементов списка
1 2
Mozart
Спасибо за наглядный тест производительности разных способов :)

При работе с большими списками обязательно буду пользоваться вариантом с count.
fata1ex
Mozart, да дело не (только) в скорости. Вы посмотрите хотя бы ЧТО вы передаёте в функцию и ЧТО и КАК вы там используете. Надо учиться писать хороший код с самого начала пути, чтобы потом в подобных примерах вам даже в голову не пришло бы пересчитывать максимальный элемент массива или менять массив при итерации по нему.

Ну и сама конструкция, не беря в расчет алгоритмическую сложность, отвратительна, тут даже обсуждать нечего. Создание функции для её однократного вызова в месте её создания, да ещё и с передачей неиспользуемого параметра, использованием глобальной переменной и дублированием названий переменных, - это насилие над программистским разумом.
Mozart
Спасибо за критику, теперь буду более внимателен в своих действиях и смотреть в перспективу на улучшение общей производительности программы. Действительно, мой вариант оказался очень плохим при работе с большими списками, сейчас сам проверил и разница в скорости вычислений видна невооруженным глазом и без бенчмарков.

Ошибка, как я понял, у меня была в том, что функция пересчитывала весь список для каждого элемента этой же функции, т.е. например для величины списка в 10000 элементов общее количество действий выходит 10000 * 10000 против 10000 * 2 (для вычисления max и для вычисления count(max))

Сейчас я учел эту ошибку и сделал вот так:

a=[ ... ]
(lambda x: [max(x)] * x.count(max(x))) (a)

Я лезу с лямбдой постоянно, потому что мне нужно решить эту задачу в 1 действие (дали задание такое =)

Ну или как уже предлагали выше:

a = [ ... ]
a = [b.append(x) for x in a if x == max(a)]
FishHook
Блин, Моцарт,
[max(a)] * a.count(max(a))
это и есть одно действие, нахрена тебе лямбда то?
fata1ex
Mozart lambda используется в 99% случаев для передачи самой себя в другую функцию. Например, в map или filter. Сама по себе она практически не нужна.
FishHook
Еще, решение, проверь на скорость ели хочешь, мне лень

a = [1,2,3,4,5,6,6,6,6,0,1,5]
a.sort()
print a[a.index(a[-1]):]
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