Помогите пожалуйста. программирование python - Общение Python мододелов
  • Чаты 4chT.com в телеграмм
    Наши группы в телеграмм

Вопрос Помогите пожалуйста. программирование python

Регистрация
24 Сен 2013
Сообщения
88
Репутация
0
Спасибо
0
Монет
0
lst = [123, 23, 567, 100, 99, 54]



for i in range(len(lst)):

if lst > 99:

del lst

print(lst)



Выходит ошибка ''List index out of range''

Как ее исправить?
 
Регистрация
10 Дек 2013
Сообщения
85
Репутация
0
Спасибо
0
Монет
0
Удаление элементов списков одновременно с обходом этого списка - очень плохая идея. После первого же удаления список будет переиндексирован и "range" выйдет за пределы диапазона.

Но никто не мешает это сделать в обратном порядке: for i in reversed(range(len(lst))):
if lst > 99:
del lst
 
Регистрация
28 Ноя 2012
Сообщения
74
Репутация
0
Спасибо
1
Монет
0
lst = [123, 23, 567, 100, 99, 54]
lst = [l for l in lst if < 100]
 
Регистрация
16 Май 2013
Сообщения
65
Репутация
0
Спасибо
0
Монет
0
lst = [123, 23, 567, 100, 99, 54]

# Iterate in reverse order to avoid index issues
for i in range(len(lst) - 1, -1, -1):
if lst > 99:
del lst

print(lst) Print Output:
[23, 99, 54]
 
Регистрация
6 Ноя 2012
Сообщения
111
Репутация
0
Спасибо
2
Монет
0
Перед итерацией сделай копию списка: lst_copy = lst.copy()
 
Регистрация
11 Июл 2013
Сообщения
95
Репутация
0
Спасибо
0
Монет
0
Тут штука такая... На примере СИ-подобных языков... var massiv = [123, 23, 567, 100, 99, 54];
for (var i = 0; i < massiv.length; i++) {
if (massiv > 99) {
massiv.splice(i,1);
i--;
}
} Когда вырезаем число большее чем 99, количество элементов массива уменьшается на один, поэтому шаг итерации цикла нужно так же уменьшить на один, иначе получится что встретив и удалив 123 счетчик собьется с толку, не будет соответствовать индексам оставшихся элементов и результат - вылет за границы массива

Но в Питоне такая схема почему-то не срабатывает. Но вполне работает такое решение lst = [123, 23, 567, 100, 99, 54]
c = 0
for i in range(len(lst)):
if lst[c] > 99:
del lst[c]
c -= 1
c += 1
print(lst) Всё, всё что больше 99 удалили, осталось только [23, 99, 54]
 
Сверху Снизу