Как удалить каждый второй элемент из списка python
Перейти к содержимому

Как удалить каждый второй элемент из списка python

  • автор:

Python: как удалить / удалить каждый n-й элемент из списка?

Я уже просмотрел этот пост: Python: создание нового списка из существующих отбрасывая каждый n-й элемент, но по какой-то причине он не работает для меня:

Эта функция принимает список и n . Затем он удаляет каждый n-й элемент, используя n-шаг из списка, и печатает результат.

Вот мой вызов функции:

Неверный вывод:
[2, 4] вместо [1, 3]

Тогда я попробовал вариант по ссылке выше:

Опять же, вызов функции:

Дает мне тот же неправильный результат: [2, 4] вместо [1, 3]

Как правильно удалить / удалить / удалить каждый n-й элемент из списка?

5 ответов

В вашей первой функции mylist[0::n] равен [1, 3] , потому что 0::n означает, что первый элемент равен 0, а остальные элементы — это каждый n th элемент после первого. Как сказал Даниэль, вы можете использовать mylist[::n] , что означает каждый n th элемент.

В вашей второй функции индекс начинается с 0, а 0 % 0 равен 0, поэтому он не копирует первый элемент. То же самое для третьего элемента ( 2 % 2 равен 0). Так что все, что вам нужно сделать, это new_list = [item for index, item in enumerate(mylist) if (index + 1) % n != 0]

Совет: вы можете использовать return вместо print() в подобных функциях.

Еще один способ сделать это — создать новый список, содержащий только те элементы, которые вам нужны.

Если бы n было 5, это вернуло бы список, содержащий элементы [1,2,3,4,6,7,8,9,11 . ] Преимущество этого состоит в том, что вы сохраняете свой первоначальный список, который полезно, если вы собираетесь повторно использовать данные. Однако, если вы беспокоитесь о сохранении памяти, то, вероятно, не самый лучший.

Ваш первый подход выглядит хорошо для меня — вам просто нужно адаптировать свой стартовый индекс, если вы хотите отбросить элементы 1, 1 + n, 1 + 2n, . (как кажется, имеет место):

Вывод правильный, вы удаляете элементы с индексами 0, n, 2n, . Таким образом, 1 и 3 удаляются, 2 и 4 остаются. Поэтому, если вы хотите напечатать элемент 0, n, 2n, . просто напишите

Python-сообщество

Есть необходимость удалять, к примеру, каждый 4-й элемент в списке до тех пор, пока len() этого списка не будет равно 1.
Пример.
Есть список
Из него нужно удалять каждый 4-й элемент. После удаления элемента продолжаем отсчитывать дальше 4-ый элемент.
1) — удалили первый элемент
2) — после удаления “4” продолжаем отсчет с элемента “5”.
3) — далее выполняются аналогичные действия
4)
5) — остался один элемент. len(spisok) == 1 и программа завершает работу.
Не знаю, как сделать так, чтобы после удаления элемента продолжать отсчет со следующего элемента, а не с начала списка.

Самый питонический способ удалить несколько предметов из списка

Встроенная структура данных Python встроенная структура данных имеет много мощных методов, с которыми любой продвинутый программист Python должен быть знаком. Однако некоторые операции в списках не могут быть выполнены, просто вызывая правильный метод. Вы можете добавить один элемент в список, используя метод добавления (элемент) в списке. Если вы хотите добавить список … Самый питонический способ удалить несколько элементов из списка Подробнее »

  • Автор записи

Встроенная структура данных Python встроенная структура данных имеет много мощных методов, с которыми любой продвинутый программист Python должен быть знаком. Однако некоторые операции в списках не могут быть выполнены, просто вызывая правильный метод.

Вы можете добавить один элемент в список, используя метод Применение (товар) в списке. Если вы хотите добавить список элементов в другой список, есть метод Развернуть (предметы) который делает работу для вас.

То же самое касается, если вы хотите удалить элемент из списка, вы просто называете метод Убрать предмет) И вы получаете желаемый результат.

Но, вы когда-нибудь задавались вопросом, как удалить список предметов из данного списка? Или что, если были даны индексы предметов, которые будут удалены, как бы вы сделали это?

Это были вопросы, которые я просил себя в одном из моих последних проектов хобби. Поэтому я решил узнать самый питонический способ сделать это.

Проблема

Давайте отставьте нашу проблему, подобную этой: учитывая список задач, Как мы можем удалить все предметы из списка которые отмечены как сделанные?

В настоящее время реализация выглядит следующим образом:

Итак, как мы можем очистить наш список Todo, чтобы он содержит только задачи, которые еще не были сделаны?

Растворы

Следующие решения могут быть разделены на две группы:

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8
  1. Удалить элементы данных индексов
  2. Удалить элементы определенным условием

Любое решение первого типа также может использоваться для удаления элементов данным условием. Чтобы выполнить это, все, что нам нужно сделать, является случаем, повторяется один раз по сравнению с входным списком, проверьте состояние и хранить индексы элементов, для которых состояние было Правда Отказ Это может быть реализовано следующим образом:

Так как требуется одна итерация списка, чтобы найти индексы, это добавляет На) к сложности выполнения. Тем не менее, так как любое решение имеет как минимум временную сложность На) мы можем пренебрегать этим первым шагом.

Метод 1: Удалите один элемент из списка и повторите в цикле

Как уже упоминалось ранее, есть методы удаления одного элемента из списка либо по значению, либо по индексу.

Поэтому одним решением удаления нескольких элементов является использование метода, который удаляет один элемент и выполняет его в цикле. Хотя есть ловушка к этому решению. После того, как мы удалим элемент на индексе 0, все другие элементы смены, и их индексы меняются, потому что элемент при индексе 1 теперь находится на индексе 0 и так далее.

Вот как решение будет выглядеть как код:

1.1. Удалить с помощью POP ()

list.pop () Метод Удаляет и возвращает последний элемент из существующего Список Отказ list.pop (индекс) Способ с дополнительным аргументом индекс Удаляет и возвращает элемент в положение показатель Отказ

Ну, наверное, это выглядит немного неловко для вас, и будьте уверены, это не так, как вы сделаете это в Python!

Чтобы избежать смещения, мы можем обратить вспять список индексов, чтобы мы могли удалить элементы с конца для начала:

1.2. Удалить с помощью удаления ()

Слегка проще прощественное решение, но все еще не лучшее решение, использует Метод Re . Переместить (предмет) Отказ

Мы повторяем перечень и проверяем каждый элемент, если он удовлетворил условие, чтобы его можно было удалить. Это решение будет выглядеть так:

Будьте осторожны, если вы используете Убрать предмет) В списке простых типов данных, таких как целые числа. Функция Удалить () Удаляет первое вхождение данного значения из списка!

Во всех вышеуказанных решениях мы выполнили упреждение на месте, что означает, что мы сохранили начальный экземпляр списка.

К настоящему времени вы должны увидеть, хорошее решение проблемы не так очевидно.

1.3. Удалить используя itemgetter () и удалить ()

Если вы используете функцию itemgetter из модуля оператор Есть еще одно интересное решение, которое в основном является улучшением раствора 1.1.

Функция itemgetter принимает произвольное количество показателей и возвращает все элементы из этих показателей в кортеже. Вот реализация предлагаемого решения:

Но все же, код более сложным, чем он должен быть.

Метод 2. Удалить несколько предметов из списка

В предыдущих решениях мы просто адаптировали функциональность для удаления одного элемента, чтобы мы могли использовать его внутри цикла. В этом разделе мы посмотрим на большее количество решений для Pythonic для этой проблемы.

2.1. Удалите все элементы из списка

Если вы хотите удалить все элементы из списка, существует очень простое решение: используйте метод класса списка CLEAR (). Он удаляет все элементы из списка на месте.

2.2. Удалить ломтик из списка

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

Это может выглядеть так:

Он удаляет элементы на месте, однако, он не помогает, если мы хотим удалить случайно распределенные элементы из нашего списка.

2.3. Удалите случайно распределенные элементы из списка с использованием заданных операций

Во-первых, мы повторяем перечень один раз и извлеките все предметы для удаления. Затем мы конвертируем оба списка для устанавливаемых и выполнения удаления с использованием заданных операций. Это выглядит следующим образом:

Под капотом набор в Python является HASHMAP, который позволяет выполнять определенные операции на множествах очень быстро ( o (1) ). К сожалению, мы должны Конвертировать из списка в комплект и назад Так что мы потеряем преимущество в скорости. И снова мы в конечном итоге с O (n) решение.

Дополнительная информация о вычислительной сложности Python операций, проверить нашу подробную статью о теме.

Это решение не работает на месте и немного сложно читать из-за многих преобразований между структурами данных.

2.4. Удалите случайно распределенные элементы из списка с использованием понимания списка

Лучший способ сделать это в Python на самом деле очень близко к тому, что мы видели в первом разделе этой статьи, в котором мы еемали по поводу списка и удалили элементы, для которых определенное условие было правдой.

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

Python предоставляет именно то, что нам нужно получить желаемый результат в одну линейку кода: список потенциалов.

Если мы назначаем результат понимания списка обратно на наш начальный to_list Переменная, эта переменная теперь будет указывать на список, содержащее только задачи, которые еще не были выполнены.

После вышеуказанной линии кода адрес памяти, к которому переменная to_list Точки изменились!

Однако вот как вы должны удалить несколько элементов из списка в Python. Если вы хотите сделать это на месте, есть также однострочное решение проблемы, однако, я лично не рекомендую вам использовать это.

Будьте честны, как долго вы взяли, чтобы обернуть голову вокруг этого?

Мы используем понимание фиктивного списка, в котором мы удаляем выбранные элементы из исходного списка, наконец, мы выбрасываем результирующий список понимания списка.

Итак, что мы на самом деле делаем, это злоупотреблять в понимании списка для итерации за to_list и удалите предметы от него.

Вывод

В зависимости от распределения предметов в списке есть разные решения.

  1. Если вы хотите удалить все элементы из списка, используйте метод списка Очистить () Отказ
  2. Если вы хотите удалить непрерывный диапазон из списка или если вы хотите удалить элементы с равными расстояниями между, используйте нарезку оператором del l [Start: Stop] Отказ
  3. Если вы хотите удалить случайно распределенные элементы, используйте список списка, которые выбирают только элементы, которые вы хотите сохранить – это решение, которое я рекомендую.

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

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моим бесплатным вебинаре «Как построить свой навык высокого дохода Python» И посмотрите, как я вырос в моем кодировании бизнеса в Интернете и как вы можете тоже – от комфорта вашего собственного дома.

Как в списке обнулить каждый второй элемент при помощи цикла for в Python

Нужно написать два цикла for, один из которых обнулит каждый второй элемент списка (передать диапазон нужно с помощью функций range() и len() и использовать срезы). Второй цикл for должен просуммировать оставшиеся элементы, записав получившееся значение в переменную. Мой код

Буду благодарна всем, кто укажет на мою ошибку в первом цикле и поможет разобраться со вторым. Заранее всем большое спасибо.

Используя range. Можно задать шаг третьим параметром. Пример:

Соотвественно сделать это подобным образом (перепроверьте и отладьте код пожалуйста)

P.S Если Вы считаете сумму, лучше не обнулять элемент, а вырезать его. Например используя функцию pop()

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *