Я работаю над следующим:
Напишите функцию, которая возвращает n-й наименьший номер списка (или вообще повторяемый). Вернуть самое низкое значение, если второй аргумент не указан
Обратите внимание, что если список содержит дубликаты, они должны быть обработаны до определения nth самого низкого
Я получил следующее, чтобы нормально работать:
numbers = [8,9, 1,300,5, 54, 54]
def nth_lowest(b, n='N/A'):
nums = set(b)
if n == 'N/A':
return min(b)
else:
nums = sorted(nums)
return nums[n-1]
print(nth_lowest(numbers))
print(nth_lowest('ananasgnasgzynrmas', 6))
print(nth_lowest(numbers, 4))
Но я хотел попробовать написать это без использования этих встроенных функций SET или MIN. Вот что у меня есть:
numbers = [8,9, 1,300,5, 54, 54]
def nth_lowest(b, n='N/A'):
nums = []
new_list = []
for i in b: # instead of using set()
if i not in nums:
nums.append(i)
nums = sorted(nums)
if n == 'N/A':
while b: # instead of using min()
minimum = b[0]
for x in b:
if x < minimum:
minimum = x
new_list.append(minimum)
b.remove(minimum)
return new_list
else:
return nums[n-1]
print(nth_lowest(numbers))
print(nth_lowest('ananasgnasgzynrmas', 6))
print(nth_lowest(numbers, 4))
но выдает следующее сообщение об ошибке:
return nums[n-1]
IndexError: list index out of range
Есть идеи?