#python-3.x #loops
#python-3.x #циклы
Вопрос:
import math
array = [16,5,3,4,11,9,13]
for x in array[0:len(array)-1]:
key=x
index=array.index(x)
posj=index
for y in array[index 1:len(array)]:
if y<key:
key=y
posj=array.index(y)
if index!=posj:
hold=array[index]
array[index]=key
array[posj]=hold
print(array)
Я пытаюсь реализовать сортировку по вставке.
После использования отладчика выясняется, что на каждой итерации цикла он использует массив [16,5,3,4,11,9,13] вместо обновленного массива, который получается после итерации цикла.
Как я могу сделать x обновленным элементом для данного показателя?
Комментарии:
1.
array[0:len(array)-1]
создает копиюarray
2. Я вижу. Тогда как мне обновлять эту копию?
3. Поскольку вы не назначили копию какой-либо переменной, вы не можете. Я также не уверен, почему вы вообще создаете копию вместо того, чтобы перебирать массив по индексу
4. Хороший момент, я думаю, мое невежество в Python проявляется. Должен ли я удалить этот вопрос?
Ответ №1:
Вместо
for x in array[0:len(array)-1]:
попробуйте
for x in array:
Вывод
[3, 4, 5, 9, 11, 13, 16]
Комментарии:
1. Выполнение этого способа оставляет мне только возможность перебора каждого элемента. Как я могу выполнить итерацию только по n-1 элементам, не создавая копию массива? Не то чтобы это имело значение в этой конкретной реализации, но для дальнейшего использования я хотел бы знать.
2. используйте счетчик и условие прерывания
3. Итак, в чем разница между вашим решением и
array[0:len(array)]
.4. массив[0:len(array)] создает копию