Нахождение максимального и минимального значений
Предложите более простой способ нахождения максимального и минимального чисел из заданных, БЕЗ использования функций min() и max() .
В моем коде задается 6 чисел (первое — первая строчка и еще 5 в цикле for ) и из них выбираются максимальное и минимальное. Заранее спасибо.
![]()
![]()
Ваш алгоритм проще не сделать — чтобы узнать минимум/максимум, в любом случае нужно сравнить все числа.
Но код можно немного упростить:
-
В модуле sys есть информация о максимальном и минимальном значении типа float, конкретно в sys.float_info , можно использовать это, чтобы не присваивать значение первого введенного числа.
Также не совсем понятно, для чего вы делаете лишнюю проверку a < max при проверке числа на минимальность. Если число меньше минимума, то оно, очевидно, меньше максимума, ведь переменная максимума в вашем коде только растет, а переменная минимума только убывает, если изначально они равны, то проверка a < max всегда будет выдавать True, а значит, она лишняя.
Min and Max of a List (without using min/max function)
I was wondering if there is a way to find min & max of a list without using min/max functions in Python. So I wrote a small code for the same using recursion. My logic is very naive: I make two stacks ( min_stack and max_stack ) which keep track of minimum and maximum during each recursive call. I have two questions:
- Could somebody help me estimate the complexity of my code?
- Is there a better way to do this? Will sorting the list using mergesort/quicksort and picking up first and last element give a better performance?
Here is my attempt in Python:
![]()
11 Answers 11
Using sorted() would, of course, be reliable, quick to write, and high performance for moderate-sized lists because it is built-in. For large lists, an O(n) algorithm would be faster e.g.:
. for which the output is:
I was interested to check the performance of the two alternatives. On my PC running Windows XP and Python 3.2.3, I found that the sorting approach is faster than the minmax1() function defined above for lists of fewer than 500 elements but, for longer lists, the O(n) minmax1() is faster. My timing test code was as follows:
![]()
Finding Min and Max of a list using only recursion.
I had this similar assignment last week and I divided the code into three parts.
Step 1: Finding the minimum value in list
Step 2: Sorting the list using into ascending order (smallest to largest)
(I have previously answered a sorting a list question and provided the same code. So please don’t flag me for plagiarism since it’s my own code Likn: Finding minimum element in a list (recursively) — Python ).
*Step 3: Make a new function with an argument whether the user wants Min value or Max
The last step is not recursive but if you compile all the three steps into one function it will be "1 recursive function".
P.S if your question was only about finding the Min and Max in a list you can skip Step 2 and make a few changes to to Step 1 and Step 3
Задача 7. Опять?
Вы снова встретились со своим старым другом, который был безмерно благодарен вам за то, что вы помогли ему сдать задачу тому преподавателю. Вот только друг всё равно выглядел довольно грустным. Спросив в чём дело, друг взорвался эмоциями и рассказал, что теперь препод попросил написать функцию нахождения минимального числа без использования условного оператора, циклов и функции min.
Конечно же, вы решили снова помочь бедняге.
Напишите для него такую программу.
Как получить максимальное значение и минимальное значение данного списка в виде кортежа без использования встроенной функции max и min из python
Я новичок в Python. У меня есть список значений, таких как data = [100,50,3,205,10], и я пытаюсь написать одну функцию, которая будет получать минимальное и максимальное значение в кортеж без использования функции min, max
Вот мой код, и когда я выполняю это, я получаю ма, значения mi (3,3) — которые являются неправильными.
Передача данных в функцию findmax
Печать ( findmax ( [ 100,50,3,205,10 ] ) )
7 ответов
Это может быть полезно. Нет необходимости дважды зацикливать входные данные.
Вы можете сделать это в одну строку, хотя и очень неэффективно, с пониманием сортировки и списка
Или, более серьезно, вы должны принять во внимание возможность получения пустого списка.
Цикл приветствия, если в вашем списке много элементов, может отнять ваше вычислительное время. Я предлагаю вместо этого сделать это в пандах
import pandas as pd
Затем создайте DataFrame, используя ваши данные:
Используя этот код, вы получите максимальное значение: <<Х0>>
Надеюсь это поможет :))
Вот другой подход к нахождению минимального и максимального значения за один проход, считывая значения по два за раз. Вместо выполнения 2 сравнений на элемент, он выполняет 3 для каждых 2 элементов. При этом также используется итератор для перемещения по вводу и zip_longest для просмотра списка попарно:
Когда элементы списка являются целыми числами или числами с плавающей запятой, это улучшение не будет измеримым, если списки не будут очень длинными. Но если элементы списка являются сложными пользовательскими объектами, где операции> и 0
Вот интересный способ сделать это с помощью битхака, однако любые улучшения производительности, которые вы увидите из чего-то подобного, настолько незначительны, что компромисс между удобочитаемостью и производительностью не имеет смысла.
Это обрабатывает случай, когда длина входного списка равна 0. Кроме того, я думаю, что наличие if-else-if имеет больше смысла, потому что если значение меньше минимального, тогда нет смысла выполнять следующую проверку.
Вы сможете просмотреть список только один раз и сохранить минимальные и максимальные значения.