Поиск второго наименьшего числа с использованием циклов в python

Мне было интересно, как найти второе наименьшее число из списка ввода пользователя с функциями def. Кроме того, БЕЗ использования каких-либо функций сортировки, импортированных модулей и функций min () и max (), как бы найти числа, используя только циклы и реляционные операторы?

Вот мой следующий код (пока у меня есть только самое маленькое число …):

  • Как подсчитать уникальные значения внутри массива в Python?
  • Петля, пока пользовательский ввод
  • Почему вы должны вызывать .iteritems () при итерации по словарю в python?
  • В чем разница между функциями range и xrange в Python 2.X?
  • Переменные на основе ввода
  • Доступ к индексу в циклах Python for for
  • def second_smallest(): smallest = second_smallest[0] for i in second_smallest[1:]: if smallest > i: smallest = i return smallest 

    Примеры следующих тестов:

     print(second_smallest([5, 7, 2, 1, 3])) 2 print(second_smallest([100, 51, 31, 5, 10])) 10 

    Благодаря!

  • Вызвать функцию с списком аргументов в python
  • Печать при нажатии мыши
  • Используйте строку для вызова функции в Python
  • Boost.Python: функции Wrap для выпуска GIL
  • Функции фабрики python по сравнению с классом
  • Дополнительный вывод отсутствует при печати аргумента командной строки
  • 2 Solutions collect form web for “Поиск второго наименьшего числа с использованием циклов в python”

     >>> def second_smallest(lst): ... first = second = float("inf") ... for num in lst: ... if num < first: ... second, first = first, num ... elif first < num < second: ... second = num ... return second 

    Обратите внимание, что это возвращает float('inf') (начальное значение) для списков с len(lst) <= 1 как в списке нет второго элемента.

    Так что на самом деле не для домашней работы, но похоже, что вы об этом подумали. Есть две ситуации, которые нужно учитывать, и оба требуют знания самых маленьких:

    1. вторая наименьшая видится до того, как будет видно самое маленькое, и в этом случае вторым наименьшим будет значение, которое будет наименьшим, до его окончательного значения.
    2. Вторая самая маленькая из них видна после того, как будет видно самое маленькое, и в этом случае второе наименьшее будет больше, чем оно, но наименьшее не будет меньше, чем оно ИЛИ, равное ему

    Я выразил это в коде ниже. Мы должны были сохранить существующее минимальное отслеживание и добавить к нему.

     def second_smallest(): smallest = float("inf") second_smallest = float("inf") for i in second_smallest: if smallest > i: second_smallest = smallest smallest = i elif second_smallest > i and not smallest == i: second_smallest = i return second_smallest 

    Обратите внимание, что технически не может быть второго наименьшего, если вы предоставляете список одинаковых номеров. например [4,4,4,4] . Вышеприведенный код вернет 4, но на самом деле это вопрос об ошибке, который следует учитывать и решать.

    Это простой подход, который разбился бы на вопрос типа «что является nth самым маленьким?». В этот момент вы в основном создали алгоритм сортировки.

    Python - лучший язык программирования в мире.