#python #python-3.x
Вопрос:
Я изучаю python и пытаюсь реализовать пользовательскую функцию сортировки списка для целей обучения. Может ли кто-нибудь объяснить, почему возвращается приведенный ниже код [1, 1, 1, 1, 1, 1, 1]
Обновление: Спасибо вам, ребята. Я обновил свой код с помощью промежуточных инструкций печати, чтобы увидеть, где код ошибочен. Однако я все еще не могу сообразить, как действовать дальше. Я также добавил переменную y, чтобы сравнить x и сохранить меньшее значение при продолжении внутреннего цикла. Не могли бы вы, пожалуйста, дать какой-нибудь намек?
a=[1, 3, 1, 4, 3, 2, 1] a=[1, 3, 1, 4, 3, 2, 1] x=int() ## Variable to store the smaller value while comparing the list with its clone d=a[:] ## Duplicate list of a to compare. c=[] ## Sorted list def sorts(list): for i in a: ###############Loops over each item in list a y=i for q in d: #######Compares each item from **list a** with **list d** global x if ilt;=q: ## If item of list a is less than of list d (duplicate of a). Then x x=i if ygt;x: y=x elif igt;q: ## x=q if ygt;q: y=q print('X :', x) c.append(y) print('C: ', c) try: d.remove(y) print('D: ', d, 'n') except: pass return (c) sorts(a)
Спасибо!
Комментарии:
1. Что должна делать эта функция? Не могли бы вы добавить строчные комментарии в пост, чтобы объяснить свою логику? (Это тоже может вам помочь.) Вы пробовали добавлять, например, инструкции печати (или использовать отладчик), чтобы увидеть, как изменяется состояние во время цикла?
2. Ваш внутренний цикл всегда будет в конечном итоге настроен
x
1
на заключительную итерацию, а затем вы добавляете это значение к результату. Однако в вашем коде есть несколько других ошибок, поэтому вам, вероятно, следует поступить так, как предлагает @AKX, и вы можете обнаружить некоторые проблемы с вашим кодом.3. Спасибо, ребята. Я обновил свой код с помощью промежуточных инструкций печати, чтобы увидеть, где код ошибочен. Однако я все еще не могу сообразить, как действовать дальше. Я также добавил переменную y для сравнения x и сохранения меньшего значения при продолжении внутреннего цикла. Не могли бы вы, пожалуйста, дать какой-нибудь намек?
Ответ №1:
Попробуй это
def sorts(list): for idx, value in enumerate(a): for i in range(idx 1, len(a)): if valuegt;a[i]: a[idx], a[i] = a[i], a[idx] value = a[idx] return (a) print(sorts(a))
Комментарии:
1. Как этот ответ объясняет, что не так с исходным кодом?
2.[1, 3, 1, 4, 3, 2, 1] [1, 1, 4, 3, 2, 1] [1, 4, 3, 2, 1] [1, 3, 2, 1] [1, 2, 1] [1, 1] [1]
3. Это то, что pop делает со списком «d», и каждый раз, когда x устанавливается равным 1, каждый раз удаляется первый индекс списка. при сортировке мы сравниваем первое значение с каждым другим значением и проверяем, есть ли какое-либо значение, превышающее текущее значение, и меняем местами, если оно есть. Чего не было в исходном коде