Обновленный список не используется в Python

#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)] создает копию