Возврат n-го младшего числа без использования встроенных функций - Python - PullRequest
0 голосов
/ 17 января 2019

Я работаю над следующим: Напишите функцию, которая возвращает 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

Есть идеи?

1 Ответ

0 голосов
/ 17 января 2019

Проблема в том, что вы изменяете свой входной список во время алгоритма: b.remove(minimum). Затем, когда вы используете numbers во второй раз, он на самом деле пустой и так же nums. Вы можете добавить следующее в верхнюю часть функции, чтобы создать копию ввода:

b = [x for x in b]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...