Почему мой l oop не повторяет всю длину? - PullRequest
0 голосов
/ 29 апреля 2020

Это код:

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

for x in r:
     print(r)
     r.pop(1)

Когда я print(r), почему печать / l oop останавливается после 5 итераций, а не go весь путь?

Ответы [ 3 ]

2 голосов
/ 29 апреля 2020

Поскольку вы используете r.pop(1), который удаляет в каждой итерации элемент с индексом 1 списка r, поэтому вы достигаете конца списка на 5-й итерации.

Обратите внимание, что в Python Блок с отступом в al oop содержит все команды, которые будут выполнены в этом l oop.

1 голос
/ 29 апреля 2020

Инструкция r.pop(1) удаляет элемент массива по индексу 1. Поскольку массив имеет 9 элементов, и только потому, что вы печатаете его перед повторным удалением, вы видите 5 итераций.

Подробно:

  1. Первая итерация. x равно 1, [1,2,3,4,5,6,7,8,9] напечатано, элемент 2 удален
  2. Вторая итерация. x равно 3, [1,3,4,5,6,7,8,9] печатается, элемент 3 удаляется
  3. Третья итерация. x - 45 [1,4,5,6,7,8,9], элемент 4 удален
  4. Четвертая итерация. x равно 7, [1,5,6,7,8,9] напечатано, элемент 6 удален
  5. Пятая итерация . x равно 9, [1,6,7,8,9] напечатано, элемент 5 удален
  6. l oop заканчивается, потому что больше нечего повторять.

Обратите внимание, как изменяется массив внутри l oop вызвал неожиданную последовательность элементов.

0 голосов
/ 29 апреля 2020

Вы не должны изменять длину списка в l oop, это приведет к ошибкам. Если вы хотите распечатать все элементы списка, пока список не станет пустым, используйте вместо этого следующий код:

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

while r:
    print(r)
    r.pop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...