Как я могу переместить элементы в моем списке без ошибки? - PullRequest
0 голосов
/ 05 марта 2020

Я получаю «Ошибка вне диапазона» каждый раз, когда запускаю этот код. Я пытаюсь получить значение от i = 0 до i = 2 et c.

element = [x for x in range(10)]
l = len(element)
print(element)
for i in range(l):
   element[i] = element[i+1]
print(element)

Ответы [ 3 ]

1 голос
/ 05 марта 2020

Я бы рекомендовал начать с изменения for i in range(l) на for i in range(l-1). Это гарантирует, что индекс i+1 будет меньше, чем l.

. С этим связано то, что последний элемент element не будет изменен, но выясним, что делать с этим элементом. зависит от вас.

0 голосов
/ 05 марта 2020

Вы пытаетесь скопировать последнее значение в индекс, который еще не существует. Вы должны использовать добавление для последнего значения.

element = [x for x in range(10)]
for i in range(len(element)):
    if i == len(element):
        element.append(element[i])
    else:
        element[i] = element[i+1]
0 голосов
/ 05 марта 2020

Если я правильно понимаю проблему, ваш ожидаемый результат должен измениться element с:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

до:

[0, 0, 1, 2, 3, 4, 5, 6, 7, 8]

Во-первых, ваш l oop заходит на один пункт дальше - последнее значение i будет индексом последнего элемента; так что element[i+1] не существует. Это легко исправить:

for i in range(l-1):

, но возникает другая проблема: element[i] = element[i+1] перемещает element[1] в element[0] и т.д. c., Поэтому направление неверное - то, что вы хотите:

    element[i+1] = element[i]

И вообще, гораздо проще и эффективнее просто скопировать первый элемент:

element.insert(0, element[0])

и удалить последний:

element.pop()

Если я неправильно понял, и ваш ожидаемый результат на самом деле:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

тогда

element.pop(0)

еще проще.

...