Самый простой подход здесь - это просто использование встроенных в Python max()
и min()
.Обратите внимание, что мы создаем копию входящего списка, так что на исходный файл num_list
не влияет вывод remove()
:
num_list = [1,5,6,44,5,7,2,444,3]
def second_smallest(list):
temp_num_list = list.copy()
temp_num_list.remove(min(temp_num_list))
smallest_num = min(list)
second_smallest_num = min(temp_num_list)
return smallest_num, second_smallest_num
def second_largest(list):
temp_num_list = list.copy()
temp_num_list.remove(max(temp_num_list))
largest_num = max(list)
second_largest_num = max(temp_num_list)
return largest_num, second_largest_num
largest_num, second_largest_num = second_largest(num_list)
smallest_num, second_smallest_num = second_smallest(num_list)
print("Largest:", largest_num)
print("Second largest:", second_largest_num)
print("Smallest:", smallest_num)
print("Second smallest:", second_smallest_num)
:
Largest: 444
Second largest: 44
Smallest: 1
Second smallest: 2
Там нет необходимости делать какие-либо сравнения.Мы просто находим max
и min
, затем удаляем их из копии, а затем берем max
и min
из остатков.
Обратите внимание, что я абстрагировал num_list
из функций, но оставив их в функциях будет работать.Этот подход позволяет вам повторно использовать функции с различными списками в вашем коде.
В качестве альтернативы, как упоминалось в другом ответе здесь, из @andercruzbr, вы можете импортировать модуль heapq
и просто выполнить:
import heapq
num_list = [1,5,6,44,5,7,2,444,3]
def smallest_nums(list):
return heapq.nsmallest(2, num_list)
def largest_nums(list):
return heapq.nlargest(2, list)
print("Largest:", largest_nums(num_list)[0])
print("Second largest:", largest_nums(num_list)[1])
print("Smallest:", smallest_nums(num_list)[0])
print("Second smallest:", smallest_nums(num_list)[1])
Выход:
Largest: 444
Second largest: 44
Smallest: 1
Second smallest: 2