Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Как найти второй максимум в питоне

  1. Как найти второй максимум в питоне

    Ребзя привет! Столкнулся с задачей и чет прям затупил, как найти второй максимум в питоне? Есть массив чисел, надо найти второй больше всех остальных, кто шарит поделитесь, че там делать надо. Может, есть какой-то хак или прикол? Наверняка в питоне есть классные способы это сделать. Давайте, выручайте кореша!



  2. Ждём вас в нашем чате в Телеграмм ==>> @pythoneer_chat

    А ТАКЖЕ: Канал о Python, статьи и книги ==>>
    @pythoneer_ru

  3. Чувак, это не так сложно, просто берешь и вырезаешь все дубли из списка, убираешь макс значение, а потом опять из оставшегося выбираешь макс. Вот пример кода:
    Программный код:
    def second_max(arr):
        
    def unique(lst):
            return list(
    set(lst))
        
    clean_list unique(arr)
        
    clean_list.remove(max(clean_list))
        return 
    max(clean_list)
      
    print(
    second_max([45135]))  # выводит 4 
    Сам юзал такую тему, работает безотказно!

  4. Цитата Сообщение от Мальвинка
    Чувак, это не так сложно, просто берешь и вырезаешь все дубли из списка, убираешь макс значение, а потом опять из оставшегося выбираешь макс. Вот пример кода:
    Программный код:
    def second_max(arr):
        
    def unique(lst):
            return list(
    set(lst))
        
    clean_list unique(arr)
        
    clean_list.remove(max(clean_list))
        return 
    max(clean_list)
      
    print(
    second_max([45135]))  # выводит 4 
    Сам юзал такую тему, работает безотказно!
    Йоу, прикольный вариант! А если список большой и много дублей, будет ок по быстродействию? Может, знаешь способы оптимизации?

  5. Ещё можно через сортировку сделать, к примеру, так:
    Программный код:
    def second_max(arr):
        
    sorted_arr sorted(set(arr), reverse=True)
        return 
    sorted_arr[1] if len(sorted_arr) > else None
      
    print(second_max([45135]))  # выводит 4 
    Этот метод попроще и понятнее вроде. Ну, и избавляет нас от дублей.

  6. Цитата Сообщение от SofiaStar
    Ещё можно через сортировку сделать, к примеру, так:
    Программный код:
    def second_max(arr):
        
    sorted_arr sorted(set(arr), reverse=True)
        return 
    sorted_arr[1] if len(sorted_arr) > else None
      
    print(second_max([45135]))  # выводит 4 
    Этот метод попроще и понятнее вроде. Ну, и избавляет нас от дублей.
    Чет вроде слишком просто выглядит, но работать должно. А не будет косяков, если массивчик пустой? Или все учтено у тебя?

  7. Если нужен максимально простой вариант, можно тупо через два прохода по массиву: нашел макс, убрал, снова нашел макс. Вот как:
    Программный код:
    def second_max(arr):
        if 
    len(arr) < 2:
            return 
    None
        first_max 
    second_max float('-inf')
        for 
    num in arr:
            if 
    num first_max:
                
    second_maxfirst_max first_maxnum
            elif first_max 
    num second_max:
                
    second_max num
        
    return second_max if second_max != float('-inf') else None
      
    print(second_max([45135]))  # выводит 4 
    Никаких дублирований или сортировок, просто по-пацански и в два прохода!

  8. Цитата Сообщение от samsebemaster
    Если нужен максимально простой вариант, можно тупо через два прохода по массиву: нашел макс, убрал, снова нашел макс. Вот как:
    Программный код:
    def second_max(arr):
        if 
    len(arr) < 2:
            return 
    None
        first_max 
    second_max float('-inf')
        for 
    num in arr:
            if 
    num first_max:
                
    second_maxfirst_max first_maxnum
            elif first_max 
    num second_max:
                
    second_max num
        
    return second_max if second_max != float('-inf') else None
      
    print(second_max([45135]))  # выводит 4 
    Никаких дублирований или сортировок, просто по-пацански и в два прохода!
    Вот это норм! А без этих флоатовских бесконечностей может сделать как-то? Глаз корёжит немного.

  9. А если хочешь через либу, то можешь так:
    Программный код:
    import heapq
      
    def second_max
    (arr):
        return 
    heapq.nlargest(2set(arr))[-1] if len(arr) > else None
      
    print(second_max([45135]))  # выводит 4 
    Тут используется heapq и все так на стиле через lib'ы, как цивилизованные люди делают!

  10. Цитата Сообщение от Князь
    А если хочешь через либу, то можешь так:
    Программный код:
    import heapq
      
    def second_max
    (arr):
        return 
    heapq.nlargest(2set(arr))[-1] if len(arr) > else None
      
    print(second_max([45135]))  # выводит 4 
    Тут используется heapq и все так на стиле через lib'ы, как цивилизованные люди делают!
    Хм, прикольно подмечено. Хотя для такой простой задачи, кажется, через либу перебор, но мимимализм в строках радует!

Страница 1 из 2 12 ПоследняяПоследняя