@LGNAdin

Объясните как работает в данном случае программа?

Хочу удалить элемент списка, если его длина равна = 0. Вроде все удаляет, но никак не пойму как работает счетчик i, почему после удаления элемента списка '-' он (i) все равно принимает в конце значение 4, хотя список стал короче и последнее значение у i должно = 3

lst = ['Hello?', 'my,', '-', 'friend!', 'hoy']
i = 0
for i in range(len(lst)):
    if len(lst[i]) == 1:
        lst.pop(i)
print(lst)
  • Вопрос задан
  • 219 просмотров
Пригласить эксперта
Ответы на вопрос 4
@zexer
Реализовать удаление элементов с длиной равной единице лучше так
[i for i in list if len(i) !=1]
Ответ написан
Комментировать
range(len(lst)) вычисляется один раз, при заходе в цикл, а не вычисляется при каждой итерации.
Ответ написан
@kurrbanov
Пишу бэкенд на Питоне
После того, как вы внутри range указали длину списка, он сохраняет изначальную его длину, переменная внутри range не изменяется.
Простыми словами, он запомнил, что len(lst) = 5 и дальше не будет изменять этот параметр.

В вашем случае лучше длину списка задать изначально и задать условие выхода:

n = len(lst)

for i in range(n):
    if i == n:
        break
    if len(lst[i]) == 1:
        lst.pop(i)
        n -= 1
Ответ написан
SoreMix
@SoreMix Куратор тега Python
yellow
Потому что ваш цикл выглядит как
for i in range(5):
Попробуем посчитать
0
1
2
3
4
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы