Как найти максимальное число в отрезке питон

This is my formula in python

Implement the mathematical function f(x) = -5 x5 + 69 x2 – 47

Define the math function

def math_formula(x):

# This is the formula
    math_formula = -5 * (x**5) + 69 *(x**2) - 47
    return math_formula

Print the value in our range

for value in range (0,4):
    print 'For f(',(value),')', 'the number is:' , math_formula(value)

print ''    
print ('The the maximum of these four numbers is:'), max(math_formula(value))

The function returns the all numbers for f(0) to f(3).

Can someone answer the following question:
Why this print does not return the maximum number?

print ('The the maximum of these four numbers is:'), max(math_formula(value))

It returns the higher negative number in the range.
I have no idea how to return the max positive number. How to return the max positive number.

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

Сначала давайте вкратце рассмотрим, что такое список в Python и как найти в нем максимальное значение или просто наибольшее число.

В Python есть встроенный тип данных под названием список (list). По своей сути он сильно напоминает массив. Но в отличие от последнего данные внутри списка могут быть любого типа (необязательно одного): он может содержать целые числа, строки или значения с плавающей точкой, или даже другие списки.

Хранимые в списке данные определяются как разделенные запятыми значения, заключенные в квадратные скобки. Списки можно определять, используя любое имя переменной, а затем присваивая ей различные значения в квадратных скобках. Он является упорядоченным, изменяемым и допускает дублирование значений. Например:

list1 = ["Виктор", "Артем", "Роман"]
list2 = [16, 78, 32, 67]
list3 = ["яблоко", "манго", 16, "вишня", 3.4]

Далее мы рассмотрим возможные варианты кода на Python, реализующего поиск наибольшего элемента в списке, состоящем из сравниваемых элементов. В наших примерах будут использоваться следующие методы/функции:

  1. Встроенная функция max()
  2. Метод грубой силы (перебора)
  3. Функция reduce()
  4. Алгоритм Heap Queue (очередь с приоритетом)
  5. Функция sort()
  6. Функция sorted()
  7. Метод хвостовой рекурсии

№1 Нахождение максимального значения с помощью функции max()

Это самый простой и понятный подход к поиску наибольшего элемента. Функция Python max() возвращает самый большой элемент итерабельного объекта. Ее также можно использовать для поиска максимального значения между двумя или более параметрами.

В приведенном ниже примере список передается функции max в качестве аргумента.

list1 = [3, 2, 8, 5, 10, 6]
max_number = max(list1)
print("Наибольшее число:", max_number)

Наибольшее число: 10

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

list1 = ["Виктор", "Артем", "Роман"]
max_string = max(list1, key=len)
print("Самая длинная строка:", max_string)

Самая длинная строка: Виктор

№2 Поиск максимального значения перебором

Это самая простая реализация, но она немного медленнее, чем функция max(), поскольку мы используем этот алгоритм в цикле.

В примере выше для поиска максимального значения нами была определена функция large(). Она принимает список в качестве единственного аргумента. Для сохранения найденного значения мы используем переменную max_, которой изначально присваивается первый элемент списка. В цикле for каждый элемент сравнивается с этой переменной. Если он больше max_, то мы сохраняем значение этого элемента в нашей переменной. После сравнения со всеми членами списка в max_ гарантировано находится наибольший элемент.

def large(arr): 
    max_ = arr[0]
    for ele in arr:
        if ele > max_:
           max_ = ele
    return max_ 


list1 = [1,4,5,2,6]
result = large(list1)
print(result)  # вернется 6

№3 Нахождение максимального значения с помощью функции reduce()

В функциональных языках reduce() является важной и очень полезной функцией. В Python 3 функция reduce() перенесена в отдельный модуль стандартной библиотеки под названием functools. Это решение было принято, чтобы поощрить разработчиков использовать циклы, так как они более читабельны. Рассмотрим приведенный ниже пример использования reduce() двумя разными способами.

В этом варианте reduce() принимает два параметра. Первый — ключевое слово max, которое означает поиск максимального числа, а второй аргумент — итерабельный объект.

from functools import reduce


list1 = [-1, 3, 7, 99, 0]
print(reduce(max, list1))  # вывод: 99

Другое решение показывает интересную конструкцию с использованием лямбда-функции. Функция reduce() принимает в качестве аргумента лямбда-функцию, а та в свою очередь получает на вход условие и список для проверки максимального значения.

from functools import reduce


list1 = [-1, 3, 7, 99, 0]
print(reduce(lambda x, y: x if x > y else y, list1))  # -> 99

№4 Поиск максимального значения с помощью приоритетной очереди

Heapq — очень полезный модуль для реализации минимальной очереди. Если быть более точным, он предоставляет реализацию алгоритма очереди с приоритетом на основе кучи, известного как heapq. Важным свойством такой кучи является то, что ее наименьший элемент всегда будет корневым элементом. В приведенном примере мы используем функцию heapq.nlargest() для нахождения максимального значения.

import heapq


list1 = [-1, 3, 7, 99, 0]
print(heapq.nlargest(1, list1))  # -> [99]

Приведенный выше пример импортирует модуль heapq и принимает на вход список. Функция принимает n=1 в качестве первого аргумента, так как нам нужно найти одно максимальное значение, а вторым аргументом является наш список.

№5 Нахождение максимального значения с помощью функции sort()

Этот метод использует функцию sort() для поиска наибольшего элемента. Он принимает на вход список значений, затем сортирует его в порядке возрастания и выводит последний элемент списка. Последним элементом в списке является list[-1].

list1 = [10, 20, 4, 45, 99]
list1.sort()
print("Наибольшее число:", list1[-1])

Наибольшее число: 99

№6 Нахождение максимального значения с помощью функции sorted()

Этот метод использует функцию sorted() для поиска наибольшего элемента. В качестве входных данных он принимает список значений. Затем функция sorted() сортирует список в порядке возрастания и выводит наибольшее число.

list1=[1,4,22,41,5,2]
sorted_list = sorted(list1)
result = sorted_list[-1]
print(result)  # -> 41

№7 Поиск максимального значения с помощью хвостовой рекурсии

Этот метод не очень удобен, и иногда программисты считают его бесполезным. Данное решение использует рекурсию, и поэтому его довольно сложно быстро понять. Кроме того, такая программа очень медленная и требует много памяти. Это происходит потому, что в отличие от чистых функциональных языков, Python не оптимизирован для хвостовой рекурсии, что приводит к созданию множества стековых фреймов: по одному для каждого вызова функции.

def find_max(arr, max_=None):
    if max_ is None:
        max_ = arr.pop()
    current = arr.pop()
    if current > max_:
        max_ = current
    if arr:
        return find_max(arr, max_)
    return max_


list1=[1,2,3,4,2]
result = find_max(list1)
print(result)  # -> 4

Заключение

В этой статье мы научились находить максимальное значение из заданного списка с помощью нескольких встроенных функций, таких как max(), sort(), reduce(), sorted() и других алгоритмов. Мы написали свои код, чтобы попробовать метод перебора, хвостовой рекурсии и алгоритма приоритетной очереди.

I’m learning Python and the simple ways to handle lists is presented as an advantage. Sometimes it is, but look at this:

>>> numbers = [20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7]
>>> numbers.remove(max(numbers))
>>> max(numbers)
74

A very easy, quick way of obtaining the second largest number from a list. Except that the easy list processing helps write a program that runs through the list twice over, to find the largest and then the 2nd largest. It’s also destructive – I need two copies of the data if I wanted to keep the original. We need:

>>> numbers = [20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7]
>>> if numbers[0]>numbers[1]):
...    m, m2 = numbers[0], numbers[1]
... else:
...    m, m2 = numbers[1], numbers[0]
...
>>> for x in numbers[2:]:
...    if x>m2:
...       if x>m:
...          m2, m = m, x
...       else:
...          m2 = x
...
>>> m2
74

Which runs through the list just once, but isn’t terse and clear like the previous solution.

So: is there a way, in cases like this, to have both? The clarity of the first version, but the single run through of the second?

asked Apr 25, 2013 at 22:16

boisvert's user avatar

10

You could use the heapq module:

>>> el = [20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7]
>>> import heapq
>>> heapq.nlargest(2, el)
[90.8, 74]

And go from there…

Natan Streppel's user avatar

answered Apr 25, 2013 at 22:23

Jon Clements's user avatar

Jon ClementsJon Clements

138k32 gold badges244 silver badges278 bronze badges

11

Since @OscarLopez and I have different opinions on what the second largest means, I’ll post the code according to my interpretation and in line with the first algorithm provided by the questioner.

def second_largest(numbers):
    count = 0
    m1 = m2 = float('-inf')
    for x in numbers:
        count += 1
        if x > m2:
            if x >= m1:
                m1, m2 = x, m1            
            else:
                m2 = x
    return m2 if count >= 2 else None

(Note: Negative infinity is used here instead of None since None has different sorting behavior in Python 2 and 3 – see Python – Find second smallest number; a check for the number of elements in numbers makes sure that negative infinity won’t be returned when the actual answer is undefined.)

If the maximum occurs multiple times, it may be the second largest as well. Another thing about this approach is that it works correctly if there are less than two elements; then there is no second largest.

Running the same tests:

second_largest([20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7])
=> 74
second_largest([1,1,1,1,1,2])
=> 1
second_largest([2,2,2,2,2,1])
=> 2
second_largest([10,7,10])
=> 10
second_largest([1,1,1,1,1,1])
=> 1
second_largest([1])
=> None
second_largest([])
=> None

Update

I restructured the conditionals to drastically improve performance; almost by a 100% in my testing on random numbers. The reason for this is that in the original version, the elif was always evaluated in the likely event that the next number is not the largest in the list. In other words, for practically every number in the list, two comparisons were made, whereas one comparison mostly suffices – if the number is not larger than the second largest, it’s not larger than the largest either.

answered Apr 25, 2013 at 23:15

Thijs van Dien's user avatar

Thijs van DienThijs van Dien

6,4511 gold badge29 silver badges48 bronze badges

12

You could always use sorted

>>> sorted(numbers)[-2]
74

answered Apr 25, 2013 at 22:21

Volatility's user avatar

VolatilityVolatility

31k10 gold badges80 silver badges88 bronze badges

1

Try the solution below, it’s O(n) and it will store and return the second greatest number in the second variable. UPDATE: I’ve adjusted the code to work with Python 3, because now arithmetic comparisons against None are invalid.

Notice that if all elements in numbers are equal, or if numbers is empty or if it contains a single element, the variable second will end up with a value of None – this is correct, as in those cases there isn’t a “second greatest” element.

Beware: this finds the “second maximum” value, if there’s more than one value that is “first maximum”, they will all be treated as the same maximum – in my definition, in a list such as this: [10, 7, 10] the correct answer is 7.

def second_largest(numbers):
    minimum = float('-inf')
    first, second = minimum, minimum
    for n in numbers:
        if n > first:
            first, second = n, first
        elif first > n > second:
            second = n
    return second if second != minimum else None

Here are some tests:

second_largest([20, 67, 3, 2.6, 7, 74, 2.8, 90.8, 52.8, 4, 3, 2, 5, 7])
=> 74
second_largest([1, 1, 1, 1, 1, 2])
=> 1
second_largest([2, 2, 2, 2, 2, 1])
=> 1
second_largest([10, 7, 10])
=> 7
second_largest( [1, 3, 10, 16])
=> 10
second_largest([1, 1, 1, 1, 1, 1])
=> None
second_largest([1])
=> None
second_largest([])
=> None

answered Apr 25, 2013 at 22:51

Óscar López's user avatar

Óscar LópezÓscar López

231k37 gold badges310 silver badges385 bronze badges

13

You can find the 2nd largest by any of the following ways:

Option 1:

numbers = set(numbers)
numbers.remove(max(numbers))
max(numbers)

Option 2:

sorted(set(numbers))[-2]

answered Jul 12, 2018 at 16:12

Sahil Chhabra's user avatar

Sahil ChhabraSahil Chhabra

10.2k4 gold badges62 silver badges62 bronze badges

0

The quickselect algorithm, O(n) cousin to quicksort, will do what you want. Quickselect has average performance O(n). Worst case performance is O(n^2) just like quicksort but that’s rare, and modifications to quickselect reduce the worst case performance to O(n).

The idea of quickselect is to use the same pivot, lower, higher idea of quicksort, but to then ignore the lower part and to further order just the higher part.

answered Jun 13, 2015 at 18:36

Edward Doolittle's user avatar

Edward DoolittleEdward Doolittle

3,9702 gold badges14 silver badges27 bronze badges

2

Why to complicate the scenario? Its very simple and straight forward

  1. Convert list to set – removes duplicates
  2. Convert set to list again – which gives list in ascending order

Here is a code

mlist = [2, 3, 6, 6, 5]
mlist = list(set(mlist))
print mlist[-2]

answered Nov 7, 2016 at 7:36

Abhishek Kulkarni's user avatar

3

This is one of the Simple Way

def find_second_largest(arr):
    first, second = float('-inf'), float('-inf')

    for number in arr:
        if number > first:
            second = first
            first = number
        elif second < number < first:
            second = number

    return second

answered Oct 19, 2021 at 11:58

Ganesh Patil's user avatar

2

there are some good answers here for type([]), in case someone needed the same thing on a type({}) here it is,

def secondLargest(D):
    def second_largest(L):  
        if(len(L)<2):
            raise Exception("Second_Of_One")
        KFL=None #KeyForLargest
        KFS=None #KeyForSecondLargest
        n = 0
        for k in L:
            if(KFL == None or k>=L[KFL]):
                KFS = KFL
                KFL = n
            elif(KFS == None or k>=L[KFS]):
                KFS = n
            n+=1
        return (KFS)
    KFL=None #KeyForLargest
    KFS=None #KeyForSecondLargest
    if(len(D)<2):
        raise Exception("Second_Of_One")
    if(type(D)!=type({})):
        if(type(D)==type([])):
            return(second_largest(D))
        else:
            raise Exception("TypeError")
    else:
        for k in D:
            if(KFL == None or D[k]>=D[KFL]):
                KFS = KFL               
                KFL = k
            elif(KFS == None or D[k] >= D[KFS]):
                KFS = k
    return(KFS)

a = {'one':1 , 'two': 2 , 'thirty':30}
b = [30,1,2] 
print(a[secondLargest(a)])
print(b[secondLargest(b)])

Just for fun I tried to make it user friendly xD

answered Jan 13, 2015 at 16:24

kpie's user avatar

kpiekpie

9,4685 gold badges28 silver badges49 bronze badges

O(n): Time Complexity of a loop is considered as O(n) if the loop variables is incremented / decremented by a constant amount. For example following functions have O(n) time complexity.

 // Here c is a positive integer constant   
   for (int i = 1; i <= n; i += c) {  
        // some O(1) expressions
   }

To find the second largest number i used the below method to find the largest number first and then search the list if thats in there or not

x = [1,2,3]
A = list(map(int, x))
y = max(A)
k1 = list()
for values in range(len(A)):
if y !=A[values]:
    k.append(A[values])

z = max(k1)
print z

answered Aug 2, 2016 at 6:27

Bharatwaja's user avatar

BharatwajaBharatwaja

8336 silver badges5 bronze badges

1

    def SecondLargest(x):
        largest = max(x[0],x[1])
        largest2 = min(x[0],x[1])
        for item in x:
            if item > largest:
               largest2 = largest
               largest = item
            elif largest2 < item and item < largest:
               largest2 = item
        return largest2
    SecondLargest([20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7])

answered Apr 30, 2018 at 22:33

Mike's user avatar

MikeMike

4504 silver badges12 bronze badges

Just to make the accepted answer more general, the following is the extension to get the kth largest value:

def kth_largest(numbers, k):
    largest_ladder = [float('-inf')] * k
    count = 0
    for x in numbers:
        count += 1
        ladder_pos = 1
        for v in largest_ladder:
            if x > v:
                ladder_pos += 1
            else:
                break
        if ladder_pos > 1:
            largest_ladder = largest_ladder[1:ladder_pos] + [x] + largest_ladder[ladder_pos:]
    return largest_ladder[0] if count >= k else None

answered Jan 9, 2019 at 5:39

Bily's user avatar

BilyBily

7316 silver badges15 bronze badges

list_nums = [1, 2, 6, 6, 5]
minimum = float('-inf')
max, min = minimum, minimum
for num in list_nums:
    if num > max:
        max, min = num, max
    elif max > num > min:
        min = num
print(min if min != minimum else None)

Output

5

answered May 12, 2020 at 12:55

Shivam Bharadwaj's user avatar

Using reduce from functools should be a linear-time functional-style alternative:

from functools import reduce

def update_largest_two(largest_two, x):
    m1, m2 = largest_two
    return (m1, m2) if m2 >= x else (m1, x) if m1 >= x else (x, m1)


def second_largest(numbers):
    if len(numbers) < 2:
        return None
    largest_two = sorted(numbers[:2], reverse=True)
    rest = numbers[2:]
    m1, m2 = reduce(update_largest_two, rest, largest_two)
    return m2

… or in a very concise style:

from functools import reduce

def second_largest(n):
    update_largest_two = lambda a, x: a if a[1] >= x else (a[0], x) if a[0] >= x else (x, a[0])

    return None if len(n) < 2 else (reduce(update_largest_two, n[2:], sorted(n[:2], reverse=True)))[1]

answered Aug 17, 2022 at 13:11

Bernhard Stadler's user avatar

2

>>> l = [19, 1, 2, 3, 4, 20, 20]
>>> sorted(set(l))[-2]
19

answered Jul 21, 2015 at 22:52

Brent D.'s user avatar

Brent D.Brent D.

5432 silver badges7 bronze badges

2

This can be done in [N + log(N) – 2] time, which is slightly better than the loose upper bound of 2N (which can be thought of O(N) too).

The trick is to use binary recursive calls and “tennis tournament” algorithm. The winner (the largest number) will emerge after all the ‘matches’ (takes N-1 time), but if we record the ‘players’ of all the matches, and among them, group all the players that the winner has beaten, the second largest number will be the largest number in this group, i.e. the ‘losers’ group.

The size of this ‘losers’ group is log(N), and again, we can revoke the binary recursive calls to find the largest among the losers, which will take [log(N) – 1] time. Actually, we can just linearly scan the losers group to get the answer too, the time budget is the same.

Below is a sample python code:

def largest(L):
    global paris
    if len(L) == 1:
        return L[0]
    else:
        left = largest(L[:len(L)//2])
        right = largest(L[len(L)//2:])
        pairs.append((left, right))
        return max(left, right)

def second_largest(L):
    global pairs
    biggest = largest(L)
    second_L = [min(item) for item in pairs if biggest in item]

    return biggest, largest(second_L)  



if __name__ == "__main__":
    pairs = []
    # test array
    L = [2,-2,10,5,4,3,1,2,90,-98,53,45,23,56,432]    

    if len(L) == 0:
        first, second = None, None
    elif len(L) == 1:
        first, second = L[0], None
    else:
        first, second = second_largest(L)

    print('The largest number is: ' + str(first))
    print('The 2nd largest number is: ' + str(second))

answered Sep 29, 2016 at 5:47

ccy's user avatar

ccyccy

3764 silver badges7 bronze badges

1

Objective: To find the second largest number from input.

Input : 5
2 3 6 6 5

Output: 5

*n = int(raw_input())
arr = map(int, raw_input().split())
print sorted(list(set(arr)))[-2]*

Abdul Rasheed's user avatar

answered Oct 24, 2017 at 8:14

Rakesh TS's user avatar

2

you have to compare in between new values, that’s the trick, think always in the previous (the 2nd largest) should be between the max and the previous max before, that’s the one!!!!

def secondLargest(lista):
    max_number   = 0
    prev_number  = 0

    for i in range(0, len(lista)):

        if lista[i] > max_number:
            prev_number = max_number
            max_number  = lista[i]
        elif lista[i] > prev_number and lista[i] < max_number:
            prev_number = lista[i]

    return prev_number

answered Mar 6, 2020 at 16:47

Brian Sanchez's user avatar

Brian SanchezBrian Sanchez

8041 gold badge12 silver badges11 bronze badges

Best solution that my friend Dhanush Kumar came up with:

    def second_max(numbers):
        glo_max = numbers[0]
        sec_max = float("-inf")
        for i in numbers:
            if i > glo_max:
                sec_max = glo_max
                glo_max = i
            elif sec_max < i < glo_max:
                sec_max = i
        return sec_max
    
    #print(second_max([-1,-3,-4,-5,-7]))
    
    assert second_max([-1,-3,-4,-5,-7])==-3
    assert second_max([5,3,5,1,2]) == 3
    assert second_max([1,2,3,4,5,7]) ==5
    assert second_max([-3,1,2,5,-2,3,4]) == 4
    assert second_max([-3,-2,5,-1,0]) == 0
    assert second_max([0,0,0,1,0]) == 0

Bernhard Stadler's user avatar

answered Nov 5, 2020 at 13:46

chia yongkang's user avatar

You can also try this:

>>> list=[20, 20, 19, 4, 3, 2, 1,100,200,100]
>>> sorted(set(list), key=int, reverse=True)[1]
100

answered Oct 24, 2016 at 5:54

Vikram Singh Chandel's user avatar

1

A simple way :

n=int(input())
arr = set(map(int, input().split()))
arr.remove(max(arr))
print (max(arr))

answered Dec 18, 2017 at 15:41

rashedcs's user avatar

rashedcsrashedcs

3,5442 gold badges37 silver badges40 bronze badges

0

use defalut sort() method to get second largest number in the list.
sort is in built method you do not need to import module for this.

lis = [11,52,63,85,14]
lis.sort()
print(lis[len(lis)-2])

answered Apr 23, 2018 at 12:20

saigopi.me's user avatar

saigopi.mesaigopi.me

13.6k2 gold badges79 silver badges54 bronze badges

3

def secondlarget(passinput):
    passinputMax = max(passinput)  #find the maximum element from the array
    newpassinput = [i for i in passinput if i != passinputMax]  #Find the second largest element in the array
    #print (newpassinput)
    if len(newpassinput) > 0:
        return max(newpassinput) #return the second largest
    return 0
if __name__ == '__main__':
    n = int(input().strip())  # lets say 5
    passinput = list(map(int, input().rstrip().split())) # 1 2 2 3 3
    result = secondlarget(passinput) #2
    print (result) #2

answered Aug 19, 2019 at 6:58

if __name__ == '__main__':
    n = int(input())
    arr = list(map(float, input().split()))
    high = max(arr)
    secondhigh = min(arr)
    for x in arr:
        if x < high and x > secondhigh:
            secondhigh = x
    print(secondhigh)

The above code is when we are setting the elements value in the list
as per user requirements. And below code is as per the question asked

#list
numbers = [20, 67, 3 ,2.6, 7, 74, 2.8, 90.8, 52.8, 4, 3, 2, 5, 7]
#find the highest element in the list
high = max(numbers)
#find the lowest element in the list
secondhigh = min(numbers)
for x in numbers:
    '''
    find the second highest element in the list,
    it works even when there are duplicates highest element in the list.
    It runs through the entire list finding the next lowest element
    which is less then highest element but greater than lowest element in
    the list set initially. And assign that value to secondhigh variable, so 
    now this variable will have next lowest element in the list. And by end 
    of loop it will have the second highest element in the list  
    '''
    if (x<high and x>secondhigh):
        secondhigh=x
print(secondhigh)

answered Oct 2, 2019 at 8:38

Nisrin Dhoondia's user avatar

3

Max out the value by comparing each one to the max_item. In the first if, every time the value of max_item changes it gives its previous value to second_max. To tightly couple the two second if ensures the boundary

def secondmax(self, list):
    max_item = list[0]
    second_max = list[1]
    for item in list:
        if item > max_item:
            second_max =  max_item
            max_item = item
        if max_item < second_max:
            max_item = second_max
    return second_max

Trenton McKinney's user avatar

answered Dec 25, 2019 at 12:31

Ankit's user avatar

AnkitAnkit

454 bronze badges

1

Most of previous answers are correct but here is another way !

Our strategy is to create a loop with two variables first_highest and second_highest. We loop through the numbers and if our current_value is greater than the first_highest then we set second_highest to be the same as first_highest and then the second_highest to be the current number. If our current number is greater than second_highest then we set second_highest to the same as current numberenter image description here

#!/usr/bin/env python3
import sys
def find_second_highest(numbers):

    min_integer = -sys.maxsize -1
    first_highest= second_highest = min_integer
    for current_number in numbers:
        if current_number == first_highest and min_integer != second_highest:
            first_highest=current_number
        elif current_number > first_highest:
            second_highest = first_highest
            first_highest = current_number
        elif current_number > second_highest:
            second_highest = current_number
    return second_highest

print(find_second_highest([80,90,100]))
print(find_second_highest([80,80]))
print(find_second_highest([2,3,6,6,5]))

answered Nov 12, 2018 at 6:42

grepit's user avatar

grepitgrepit

20.8k6 gold badges101 silver badges81 bronze badges

1

Below code will find the max and the second max numbers without the use of max function. I assume that the input will be numeric and the numbers are separated by single space.

myList = input().split()
myList = list(map(eval,myList))


m1 = myList[0]
m2 = myList[0]

for x in myList:
    if x > m1:
        m2 = m1
        m1 = x
    elif x > m2:
        m2 = x

print ('Max Number: ',m1)
print ('2nd Max Number: ',m2)

answered Feb 6, 2021 at 17:22

Salman's user avatar

SalmanSalman

1,1965 gold badges28 silver badges59 bronze badges

2

Here I tried to come up with an answer.
2nd(Second) maximum element in a list using single loop and without using any inbuilt function.

def secondLargest(lst):
    mx = 0
    num = 0
    sec = 0
    for i in lst:
        if i > mx:
            sec = mx
            mx = i
        else:
            if i > num and num >= sec:
                sec = i
            num = i
    return sec

answered Apr 22, 2021 at 11:27

varun's user avatar

varunvarun

277 bronze badges

1

We can use 2 loop to compare and find the second largest number from list rather than removing max number from list:

def second_largest(list1):
   second_max = list1[0]
   max_nu = max(list1)

   for i in range(len(list1) -1):
       for j in range(1,len(list1)):
          if list1[i] > list1[j] and list1[i] < max_nu :
              second_max = list1[i]
          elif list1[i] < list1[j] and list1[j] < max_nu:
              second_max = list1[j]
   return second_max

l = [2, 4, 5, 6, 8, 7, 21, 20]
print(second_largest(l))

answered Nov 17, 2021 at 8:09

Aashutosh jha's user avatar

1

4 / 4 / 0

Регистрация: 22.11.2020

Сообщений: 136

1

29.09.2021, 23:25. Показов 3900. Ответов 11


Студворк — интернет-сервис помощи студентам

Найти минимальное и максимальное значение функции y(x) на отрезке [a, b].



0



707 / 346 / 120

Регистрация: 09.12.2020

Сообщений: 919

30.09.2021, 12:49

2

Рассматриваем целочисленные значения?



0



4 / 4 / 0

Регистрация: 22.11.2020

Сообщений: 136

06.10.2021, 17:59

 [ТС]

3

да верноооо



0



Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

15976 / 8989 / 2603

Регистрация: 21.10.2017

Сообщений: 20,684

06.10.2021, 18:04

4

Sonya2456, ты в принципе понимаешь условие?



0



4 / 4 / 0

Регистрация: 22.11.2020

Сообщений: 136

06.10.2021, 18:08

 [ТС]

5

да но сделать не понимаю как



0



Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

15976 / 8989 / 2603

Регистрация: 21.10.2017

Сообщений: 20,684

06.10.2021, 18:10

6

Цитата
Сообщение от Sonya2456
Посмотреть сообщение

да

Да???
Переформулирую твою же задачу – дано поле картошки 6х8 метров. Сколько минимум и максимум картошки с него можно собрать?
Решишь? Просто на бумажке, не на питоне.



1



707 / 346 / 120

Регистрация: 09.12.2020

Сообщений: 919

06.10.2021, 18:15

7

iSmokeJC, я думаю, что функция y(x) вводится, рассматриваются значения y(х) при значении x от a до b включительно



0



4 / 4 / 0

Регистрация: 22.11.2020

Сообщений: 136

06.10.2021, 18:17

 [ТС]

8

да и я так думаю



0



Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

15976 / 8989 / 2603

Регистрация: 21.10.2017

Сообщений: 20,684

06.10.2021, 18:17

9

alilxxey, интересно – каким образом она вводится?



0



alilxxey

707 / 346 / 120

Регистрация: 09.12.2020

Сообщений: 919

06.10.2021, 18:20

10

iSmokeJC, ну, к примеру, таким

Python
1
2
3
4
5
6
7
8
9
f = input('y = ')
a = int(input())
b = int(input())
res = []
for x in range(a, b + 1):
    res.append(eval(f))
print(res)
print(max(res))
print(min(res))

Код

y = 2 * x + 10
0
10
[10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30]
30
10



0



Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

15976 / 8989 / 2603

Регистрация: 21.10.2017

Сообщений: 20,684

06.10.2021, 18:24

11

alilxxey, ты серьезно думаешь, что eval прям с младых ногтей преподают людям, которые даже не в состоянии понять задание?

Добавлено через 51 секунду

Не по теме:

ТС банально не выложил скриншот искомой функции



1



707 / 346 / 120

Регистрация: 09.12.2020

Сообщений: 919

06.10.2021, 18:28

12

iSmokeJC, нет. Думаю, что ответил на Ваш вопрос на тему того каким способом вводится функция. Можно еще прямиком в код ввести. А насчет того, что люди не понимают задание – показатель начала обучения – далеко не факт. Смотря как учиться. У моего брата в универе есть куча однокурсников, которые обучаются программированию, просто копируя все задания с интернета. Люди, которые учатся со мной тоже не поголовно соответствуют уровню курса. Думаю что ТС нужно просто скопировать код и отправить его.



1



Функция min() в Python возвращает наименьший элемент в итерации или наименьший из двух или более аргументов.

Синтаксис функции min():

min(iterable, *[, key, default])
min(arg1, arg2, *args[, key])
  • Если есть только один аргумент, он должен быть итерируемым, таким как строка, список, кортеж и т.д. возвращается наименьший элемент в итерируемом объекте.
  • Если предоставлено два или более аргумента, будет возвращен наименьший из них.
  • Мы можем указать функцию ключевого аргумента, которая будет использоваться для определения наименьшего элемента. Это необязательный аргумент и в основном используется, когда аргументы являются настраиваемыми объектами.
  • Аргумент по умолчанию указывает объект, который нужно вернуть, если предоставленный итеративный объект пуст. Если итерируемый объект пуст и значение по умолчанию не указано, возникает исключение ValueError.
  • Если найдено несколько наименьших элементов, возвращается первый.

Содержание

  1. Примеры функции min
  2. Min со строкой
  3. Min с кортежем
  4. Min со списком
  5. С настраиваемыми объектами
  6. С пустой итерацией и значением по умолчанию
  7. С несколькими аргументами
  8. С аргументами и ключевой функцией
  9. С несколькими итерациями
  10. С несколькими итерациями объектов
  11. Max со строкой
  12. Max с кортежем
  13. Max list
  14. Max с настраиваемыми объектами
  15. С пустой итерацией и значением по умолчанию
  16. С несколькими аргументами
  17. С аргументами и ключевой функцией
  18. С несколькими итерациями
  19. С несколькими итерациями объектов
  20. Резюме

Давайте посмотрим на несколько примеров функции min() в python .

Min со строкой

Когда функция min() используется со строковым аргументом, возвращается символ с минимальным значением Unicode.

s = 'abcC'
print(min(s))
for c in s:
    print(c, 'unicode value =', ord(c))

Вывод:

C
a unicode value = 97
b unicode value = 98
c unicode value = 99
C unicode value = 67

Я использую функцию ord() для печати кодовой точки Unicode символов в строке.

Min с кортежем

tuple_numbers = (1, 2, 3, 4)
print(min(tuple_numbers))

Выход: 1.

Min со списком

list_numbers = [1, 2, 3, -4]

print(min(list_numbers))

Выход: -4.

С настраиваемыми объектами

Когда мы хотим использовать функцию min() с настраиваемыми объектами, мы должны предоставить ключевой аргумент функции, который будет использоваться для сравнения объектов.

class Data:
    id = 0

    def __init__(self, i):
        self.id = i

    def __str__(self):
        return 'Data[%s]' % self.id


def get_data_id(data):
    return data.id


# min() with objects and key argument
list_objects = [Data(1), Data(2), Data(-10)]

print(min(list_objects, key=get_data_id))

Вывод: Данные [-10].

Если мы не предоставим ключевую функцию в качестве аргумента, мы получим следующую ошибку.

TypeError: '

С пустой итерацией и значением по умолчанию

print(min([], default=20))

Выход: 20.

С несколькими аргументами

print(min(1, 2, 3, 4))

Выход: 1.

С аргументами и ключевой функцией

def str_length(s):
    return len(s)


print(min('a', 'abc', 'b', key=str_length))

Выход: a.

Обратите внимание, что и «a», и «b» являются наименьшими аргументами, поэтому первый «a» возвращается функцией min().

С несколькими итерациями

x1 = [10, 20, 30]
x2 = [5, 15, 40, 25]

print(min(x1, x2, key=len))

Вывод: [10, 20, 30].

Если мы не предоставим ключевую функцию в качестве аргумента, вывод будет [5, 15, 40, 25]. Это потому, что сравнение будет выполняться между элементами повторяющихся элементов один за другим. Когда будет найден элемент с меньшим значением, будет возвращена итерация с этим элементом.

С несколькими итерациями объектов

x1 = [Data(10), Data(20), Data(30)]
x2 = [Data(5), Data(15), Data(40), Data(25)]

min_list = min(x1, x2, key=len)
for x in min_list:
    print(x)

Вывод:

Data[10]
Data[20]
Data[30]

Обратите внимание, что с несколькими аргументами итерации обрабатываются как объекты. Если мы не укажем ключевую функцию, мы получим сообщение об ошибке, как TypeError: ‘. Раньше он работал с целочисленными элементами, потому что они поддерживают операторы > and <.

Функция min() в Python помогает нам идентифицировать наименьший элемент в повторяемом или наименьшем элементе из нескольких аргументов. Это полезно, потому что мы можем указать нашу собственную функцию, которая будет использоваться для сравнения с помощью ключевого аргумента. Это противоположность функции python max().

Функция max() в Python возвращает самый большой элемент в итерируемом или самый большой из двух или более аргументов.

Синтаксис функции max():

max(iterable, *[, key, default])
max(arg1, arg2, *args[, key])
  • Если есть только один аргумент, он должен быть итерируемым, таким как строка, список, кортеж и т.д. Возвращается самый большой элемент в итерации.
  • Если предоставлено два или более аргумента, будет возвращен самый большой из них.
  • Мы можем указать функцию ключевого аргумента, которая будет использоваться для определения самого большого элемента. Это необязательный аргумент и в основном используется, когда аргументы являются настраиваемыми объектами.
  • Аргумент по умолчанию указывает объект, который нужно вернуть, если предоставленный итеративный объект пуст. Если итерируемый объект пуст и значение по умолчанию не указано, возникает исключение ValueError.
  • Если найдено несколько наибольших элементов, возвращается первый.

Давайте посмотрим на несколько примеров функции max().

Max со строкой

Когда функция max() используется со строковым аргументом, возвращается символ с максимальным значением Unicode.

s = 'abcCba'
print(max(s))
print('c' > 'C')

Вывод:

c
True

Max с кортежем

tuple_numbers = (1, 2, 3, 4)
print(max(tuple_numbers))

Выход: 4.

Max list

list_numbers = [1, 2, 3, -4]

print(max(list_numbers))

Выход: 3.

Max с настраиваемыми объектами

Когда мы хотим использовать функцию max() с настраиваемыми объектами, мы должны предоставить ключевой аргумент функции, который будет использоваться для сравнения объектов.

class Data:
    id = 0

    def __init__(self, i):
        self.id = i

    def __str__(self):
        return 'Data[%s]' % self.id


def get_data_id(data):
    return data.id


# max() with objects and key argument
list_objects = [Data(1), Data(2), Data(-10)]

print(max(list_objects, key=get_data_id))

Вывод: Данные [2].

Если мы не предоставим ключевую функцию в качестве аргумента, мы получим следующую ошибку.

TypeError: '>' not supported between instances of 'Data' and 'Data'

С пустой итерацией и значением по умолчанию

print(max([], default=20))

Выход: 20.

С несколькими аргументами

print(max(1, 2, 3, 4))

Выход: 4.

С аргументами и ключевой функцией

def str_length(s):
    return len(s)


print(max('a', 'abc', 'ab', key=str_length))

Выход: abc.

С несколькими итерациями

x1 = [10, 20, 30]
x2 = [5, 15, 40, 25]

print(max(x1, x2, key=len))

Вывод: [5, 15, 40, 25].

Если мы не предоставим ключевую функцию в качестве аргумента, вывод будет [10, 20, 30]. Это потому, что сравнение будет выполняться между элементами один за другим. Когда будет найден элемент с большим значением, будет возвращена итерация с этим элементом.

С несколькими итерациями объектов

x1 = [Data(10), Data(20), Data(30)]
x2 = [Data(5), Data(15), Data(40), Data(25)]

max_list = max(x1, x2, key=len)
for x in max_list:
    print(x)

Вывод:

Data[5]
Data[15]
Data[40]
Data[25]

Обратите внимание, что итерации с несколькими аргументами обрабатываются как объекты. Если мы не укажем ключевую функцию, мы получим сообщение об ошибке как TypeError: ‘>’ не поддерживается между экземплярами ‘Data’ и ‘Data’. Раньше он работал с целочисленными элементами, потому что они поддерживают операторы > and <.

Резюме

Функция Python max() помогает нам идентифицировать самый большой элемент в повторяемом или самом большом элементе из нескольких аргументов. Это полезно, потому что мы можем указать нашу собственную функцию, которая будет использоваться для сравнения с помощью ключевого аргумента.

Добавить комментарий