Я надеялся, что вы поняли, почему вы получили индекс из-за ошибки диапазона.
Это было одной из проблем, но теперь давайте рассмотрим ваш код, потому что у вас есть какая-то "концептуальная" ошибка, в том смысле, что выне совсем понимаете, что делает код, который вы сделали.
Это то, что на самом деле делает ваш код, и именно так вы должны думать, когда получаете такие ошибки:
sample=[23,44,12,1,6,87]
temp=0
for i in range(0,len(sample)-1):
if sample[i] > sample[i+1]:
temp=sample[i]
sample[i]=sample[i+1]
sample[i+1]=temp
Первая строка:Ваш i
получит значения от 0,1,2 до 5 (в данном случае).
Вторая строка: он будет проверять, находятся ли члены списка , которые находятся рядом друг с другом .
Он проверит, больше ли первое (слева направо), чем второе, проверит 23> 44, что будет ложным, поэтому он не будет выполнять остальную часть кода.
Нет i
будет 1, поэтому вы будете проверять 44> 12, это верно, поэтому ваш код выполнится и успешно поменяет местами эти два.
Это хороший моментнаучиться плавно менять переменные в python, не используя temporвсе переменные.
sample[i], sample[i+1] = sample[i+1], sample[i]
Подробнее об этом, если хотите, смените переменную Google Python.
Итак, вернемся к исходной проблеме.
Вы успешно поменялись местами 44и 12, этот список стоит [23,12,44,1,6,87]
.
Но если вы продолжите делать это, он будет:
Поменять 44 с 1
Поменять 44 с 6
Не меняйте 44 на 87.
Но теперь список будет [23,12,1,6,44,87]
, и ваш код перестанет себя выполнять, потому что i
теперь равен 5.
Вы поймали проблему?
Вам нужно будет повторно запустить его несколько раз, чтобы фактически упорядочить его, так как он не проверяет, организован ли список, а меняет местами элементы, которые находятся рядом друг с другом.
Так что, если бы вы ( для этого конкретного списка ) запустили:
for j in range(3):
for i in range(0,len(sample)-1):
if sample[i] > sample[i+1]:
sample[i], sample[i+1] =sample[i+1], sample[i]
Список был бы упорядочен.
Сортировка упорядоченных коллекций, таких как списки, очень изучена "field ".
Я бы порекомендовал вам ознакомиться с алгоритмами сортировки, начиная с очень простых, таких как пузырьковая сортировка.поскольку это «куда вы идете» с вашим алгоритмом (например, onatm предложил).
Существуют "забавные" способы изучить этот алгоритм, например, проверить это.
Читайте это тоже, если вам интересно.
Этот сайт довольно хорошо иллюстрирует, как алгоритмы работают своим способомв отсортированный список.
Удачи, пожалуйста, прокомментируйте, если у вас есть какие-либо сомнения.