2015-09-28 3 views
0

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

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

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 

Спасибо!

+3

'second_smallest' является одновременно функцией и списком? Думаю, вам нужно отредактировать образец кода в вопросе. –

+0

Да. Это вызовет некоторые проблемы для вас. –

+3

Каков ожидаемый вывод 'print (second_smallest ([- 1, 1, 2, 3, 0, -1]))'. Это '-1' или' 0'? –

ответ

0
>>> 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

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

  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 самым маленьким?». В этот момент вы в основном создали алгоритм сортировки.

+0

Вы должны зацикливаться на' самом маленьком [ 2:] '. –

+0

не уверен, что! – Sam

+2

Nevermind, ваша обновленная логика сложнее, но заботится об этом. –

 Смежные вопросы

  • Нет связанных вопросов^_^