|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.01.2022, 20:43 | #1 |
Новичок
Джуниор
Регистрация: 16.01.2022
Сообщений: 2
|
Не отрабатывает удаление в цикле всего списка
Всем доброго дня.
У меня Python 3.2.3 Только начал изучать язык Python. Не судите строго, прошу помочь. В рамках обучения написал прогу которая должна удалять через цикл поочередно элементы из списка. Код ниже Код:
По результатам отработки кода программы, вижу удаление только 2-х первых элементов и остаток двух последних элементов в списке. Последний раз редактировалось BDA; 16.01.2022 в 21:50. |
16.01.2022, 21:59 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,342
|
Не знаю, что именно под капотом "for ... in", но вывод выглядит так, что берется не просто каждый элемент по очереди, а 1й, 2й, 3й, 4й по номерам. Но после двух pop в списке уже нет 3го и 4го элементов. Если нужно вызвать pop столько раз, сколько элементов:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
17.01.2022, 17:34 | #3 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,331
|
Посмотрел в Сети разные объяснения, но не удовлетворился.
Пробовал менять число элементов списке и получал не стабильный результат, зависящий от длины списка. Hvv77 Код:
Состав значений списка меняется методом pop(). То есть, необходимо делать переиндексацию актуального списка, но вероятно это не так. BDA Код:
Хотя размер списка и меняется, его длинна и, соответственно, набор индексов, не пересчитывается. Другой способ - не использовать цикл for: Код:
Вот вопрос: "Можно ли изменить переменную цикла и конечное значение в теле цикла?" Знаю, что в некоторых языках это делать нельзя явно, например, Ada. В Python не получится изменять переменную цикла, поскольку на следующем шаге эта переменная получит новое значение из множества значений, формируемых выражением, следующим за in. Изменять набор значений видимо тоже не следует. Но, например, в C++ - это как? Код:
Как-то так, ...
|
18.01.2022, 01:59 | #4 | |
Пользователь
Регистрация: 18.01.2022
Сообщений: 11
|
Цитата:
Что бы удалить все элементы с помощью цикла можно сделать через цикл while: Код:
Последний раз редактировалось ffuri; 18.01.2022 в 02:10. |
|
18.01.2022, 10:58 | #5 | |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,331
|
ffuri
Цитата:
pop() - сокращает длину списка и уменьшает счётчик числа циклов, который был оценен на входе в цикл. Каждая итерация цикла так же завершается уменьшением счётчика цикла. Эта интерференция операций и приводит к проблеме. Примеры: Код:
Цикл завершается, если счётчик цикла не больше нуля: <= 0. PSS: В одной из версий Pascal для DOS была ошибка. Условием завершения цикла было строгое равенство нулю разности между счётчиком и конечным значением. Если эта разность становился отрицательной, то цикл продолжался.
Как-то так, ...
|
|
18.01.2022, 11:27 | #6 |
Пользователь
Регистрация: 18.01.2022
Сообщений: 11
|
Ну как то так)) В питоне условием завершения итерации является значение False, т.е. если счетчик больше 0 - True, итерация продолжается, а иначе - False итерация завершается ) (т.е. 0, -1, -2 и т.д. принимают булевое значение False, а все что больше нуля - 1, 2, 3, 4 и т.д. - принимают булевое значение True) =)
И еще можно сделать обратную итерацию если указать в функции range первый параметр start с высоким значением, а второй параметр end меньшим значеним или же можно воспользоваться функцией reversed: Код:
Последний раз редактировалось ffuri; 18.01.2022 в 11:34. |
18.01.2022, 12:47 | #7 | |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,331
|
ffuri
Цитата:
Код:
Именно поэтому вы смогли написать: Код:
В моём, предшествующем вашему посту примере, сделана проверка на пустоту, но это только для ясности.
Как-то так, ...
|
|
22.01.2022, 07:29 | #8 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,342
|
Только не запятые, а точки с запятой. Да, вроде, можно. Компилятор не ругается. Ну не считая получившего бесконечного цикла.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
22.01.2022, 13:14 | #9 |
Новичок
Джуниор
Регистрация: 16.01.2022
Сообщений: 2
|
Спасибо всем за участие и помощь в решении задачки!!!
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
удаление элемента односвязного списка. язык СИ. всего 5 строчек кода, много времени не займет. | MisterTreb | Помощь студентам | 0 | 08.01.2013 15:17 |
Удаление всего кроме формул | Severny | Microsoft Office Excel | 21 | 13.07.2011 12:22 |
listview свойство типа data, только для всего списка | boshki | Общие вопросы Delphi | 1 | 05.06.2011 12:56 |
Удаление последнего элемента из списка и реверс этого списка. | Goose | Общие вопросы C/C++ | 8 | 16.05.2010 16:12 |
Элементы списка, выведенные в цикле, скрываются | Svetix | PHP | 5 | 24.04.2009 15:06 |