Как удалить максимальный элемент из списка python

от admin

Как исключить из списка максимальный элемент?

Так как спрашивали про самый быстрый, то рассмотрим все предложенные варианты плюс ещё один.

1. Первый предложенный вариант. Один из самых быстрых, несмотря на то что делается два прохода по списку и одно копирование хвоста после удаления:

2. Самый худший вариант. Максимум отыскивается N раз. Квадратичная сложность, последнее место:

3. Оптимизация предыдущего варианта. Сложность стала линейной снова. Скорость не самая высокая, так как изготавливается копия:

4. Вариация на тему первого. Вместо pop тут del :

5. Самый элегантный вариант. Два прохода, одно копирование, как и у первого:

6. Максимальная оптимизация. Один проход, копирования нет. Вместо него последний элемент записывается на место максимального, затем список укорачивается на единицу. Не самый быстрый, как оказалось:

7. Отчаяная попытка сделать первый вариант ещё быстрее. Убрано копирование хвоста:

8. Ещё один однопроходный способ. Этот лучше окровенно неудачного номера шестого, хотя есть копирование при удалении:

9. А можно найти максимум сортировкой за NlogN. Зато потом максимумы можно будет удалять без повторных сортировок, за константу:

Хуже всех № 2 — О-большое не обманешь. № 9 — сортировка начинает бодро но отстаёт, опять О-большое. Оптимальный по количеству проходов № 6 не самый быстрый — один проход на Питоне хуже двух проходов на C. № 3 отстаёт так как создаёт копию списка. Лучшый из однопроходных № 8. Плотной группой идут №№ 1, 4, 5 — два прохода, одно копирование. В самом конце их немного обходит № 7 за счёт отказа от копирования.

Как проводились измерения

Все приведенные ответы неявно предполагают, что максимум в списке один.
Если это не так, они просто не решают поставленную задачу.
Вот решение.

наслаждайтесь. Да, мы проигрываем на первом этапе сортировки. Это n*ln(n) операций. Однако, если максимумов 2 или более в списке, то поиск очередного из них в несортированном списке оценивается как n/2.
То есть нам надо выбирать между n*ln(n) как в приведенном здесь алгоритме и предыдущими алгоритмами n + n/2*k, где k — это количество максимумов в исходном списке )

Remove Max and Min values from python list of integers

I am not completely green to Python, but I am interested in learning/keeping good practices while I develop my skills.

I want to remove the high and low values from a list of numbers, which I know how to do, but am curious if there is a better/preferred way to do this.

I get the desired answer, but did I get the right answer appropriately?

3 Answers 3

Here’s another way to do it if you don’t want to change the order of the items:

Assumes that the high/low don’t have any duplicates in the list, or if there are, that it’s OK to remove only one of them.

This will need to do 2-4 passes through the list: two to find the max and min values, and up to 2 to find the values to remove (if they both happen to be at the end of the list). You could reduce this to one by writing a Python loop to find the max and min in a single pass (and remember the index of each so you can delete the items by index after the loop). However, min() and max() are implemented in C, so replacing them with Python code would probably result in lower performance even if it allowed you to reduce the number of passes.

Читать:
Как узнать температуру южного моста

Как исключить из списка максимальный элемент?

Так как спрашивали про самый быстрый, то рассмотрим все предложенные варианты плюс ещё один.

1. Первый предложенный вариант. Один из самых быстрых, несмотря на то что делается два прохода по списку и одно копирование хвоста после удаления:

2. Самый худший вариант. Максимум отыскивается N раз. Квадратичная сложность, последнее место:

3. Оптимизация предыдущего варианта. Сложность стала линейной снова. Скорость не самая высокая, так как изготавливается копия:

4. Вариация на тему первого. Вместо pop тут del :

5. Самый элегантный вариант. Два прохода, одно копирование, как и у первого:

6. Максимальная оптимизация. Один проход, копирования нет. Вместо него последний элемент записывается на место максимального, затем список укорачивается на единицу. Не самый быстрый, как оказалось:

7. Отчаяная попытка сделать первый вариант ещё быстрее. Убрано копирование хвоста:

8. Ещё один однопроходный способ. Этот лучше окровенно неудачного номера шестого, хотя есть копирование при удалении:

9. А можно найти максимум сортировкой за NlogN. Зато потом максимумы можно будет удалять без повторных сортировок, за константу:

Хуже всех № 2 — О-большое не обманешь. № 9 — сортировка начинает бодро но отстаёт, опять О-большое. Оптимальный по количеству проходов № 6 не самый быстрый — один проход на Питоне хуже двух проходов на C. № 3 отстаёт так как создаёт копию списка. Лучшый из однопроходных № 8. Плотной группой идут №№ 1, 4, 5 — два прохода, одно копирование. В самом конце их немного обходит № 7 за счёт отказа от копирования.

Удалить элементы, превышающие определенное значение, из списка в Python

Программирование и разработка

В этой статье мы научимся удалять элементы из списка, который больше определенного значения в Python.

Пример

Input: [12, 33, 10, 20, 25], value = 21

Output: [12, 10, 20]

Объяснение: Удалены все элементы из списка, которые больше 21.

Удалить элементы списка, превышающие заданное значение, используя понимание списка

В следующем примере мы объявляем и присваиваем список чисел переменной num_list. С пониманием списка мы можем пройтись по каждому элементу из списка и выполнить над ним действие. Здесь мы проверим, меньше ли текущее число или равно 100. Если оно истинно, оно будет возвращено в виде списка. Мы назначим возвращаемый список той же переменной num_list.

Python3

Выход:

Удалить элементы списка, превышающие заданное значение, с помощью метода remove ()

В следующем примере мы объявим и назначим список num_list с номерами. Мы удалим числа больше 100 из num_list. Мы пройдемся по каждому числу из списка и проверим, больше ли текущее число 100, если оно истинно, мы удалим его из списка с помощью метода Python remove() . Мы удалим все значения, которые больше заданного числа, как только мы пройдем по списку.

Похожие статьи