Перейти к содержимому

Как удалять из массива python

  • автор:

Rukovodstvo

статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.

Удалить элемент из массива в Python

Введение В этом руководстве будут рассмотрены некоторые распространенные способы удаления элементов из массивов Python. Вот список всех техник и методов, которые мы рассмотрим в этой статье: * remove () * pop () * del * NumPy массивы Массивы в Python Массивы и списки — это не одно и то же в Python. Хотя списки используются чаще, чем массивы, у последних все же есть свои варианты использования. Основное различие между ними заключается в том, что списки могут использоваться для хранения произвольных значений. Они также неоднородны

Время чтения: 3 мин.

Вступление

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

Массивы в Python

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

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

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

Использование remove ()

Соответственно, remove() можно использовать с любым массивом в Python. Чтобы использовать его, мы можем просто передать значение элемента, который хотим удалить. Представим, что у нас есть следующий массив:

 array = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

Чтобы удалить, скажем, элемент 40 , мы просто напишем:

 array.remove(40) 

Результат — тот же массив без значения 40 :

 [10, 20, 30, 50, 60, 70, 80, 90, 100] 

Использование pop ()

Функция pop() принимает индекс элемента, который мы хотим удалить. Если бы у нас был тот же массив, что и раньше (со значениями от 10 до 100), мы могли бы написать что-то вроде следующего:

 index = 3 array.pop(index) 

Если бы мы напечатали результат метода pop, это было бы значение 40 :

 [10, 20, 30, 50, 60, 70, 80, 90, 100] 

Аналогично тому, как pop() работает в структуре данных стека, здесь pop() также возвращает только что удаленное значение.

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

Используя del

del — ключевое слово python, используемое для удаления объектов. Его точное поведение меняется в зависимости от контекста, поэтому мы также можем использовать его для удаления элементов массива. Еще раз возьмем тот же массив и индекс, что и раньше:

 array = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] index = 3 

Чтобы удалить элемент с индексом 3 , мы просто вводим следующее:

 del array[index] 

Если бы мы теперь распечатали содержимое нашего массива, мы бы получили следующий вывод:

 [10, 20, 30, 50, 60, 70, 80, 90, 100] 

Использование массивов numpy

Массивы NumPy технически также являются массивами, и, поскольку они широко используются (особенно в машинном обучении), давайте покажем один из способов удаления элемента из массива numpy Перед использованием numpy необходимо импортировать его с помощью

 import numpy as np 

Чтобы создать numpy , мы можем обернуть наш текущий массив, используя np.array() как таковой:

 a = np.array(array) 

В качестве альтернативы мы могли бы также объявить новый массив внутри самого вызова метода:

 a = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100]) 

Теперь, чтобы удалить элемент с индексом 3 , мы используем следующий код:

 index = 3 a = np.delete(a, index) 

delete() — статический метод, объявленный в модуле numpy Он принимает массив и индекс удаляемого элемента.

Метод возвращает новый массив без удаленного элемента:

 [10, 20, 30, 50, 60, 70, 80, 90, 100] 

Заключение

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

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

Licensed under CC BY-NC-SA 4.0

Удаление части элементов списка по срезу

В результате произойдет удаление элементов последовательности sequence от индекса i до индекса j . Операция удаления элементов среза последовательности эквивалентна выполнению sequence[i:j] = [] .

Больше об индексации среза читайте в операции получения среза последовательности и смотрите встроенную функцию slice()

Замечания по операции удаления среза последовательности:

Если индекс j указанного среза выходит за пределы индексации последовательности sequence — j > len(sequence) , то в результате операции произойдет удаление элементов от индекса i последовательности до ее конца.

Если оба индекса указанного среза i > len(sequence) и j > len(sequence) — выходят за пределы индексов последовательности, то в результате операции удаления, последовательность sequence не изменится.

Если индексы указанного среза i и j опущены, то в результате произойдет удаление всей последовательности.

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

>>> x = [1, 4, 7, 10, 13, 16, 19] >>> del x[1:4] >>> x # [1, 13, 16, 19] # индекс j выходит за пределы последовательности >>> x = [1, 4, 7, 10, 13, 16, 19] >>> del x[5:20] >>> x # [1, 4, 7, 10, 13] # Cрез выходит за пределы последовательности >>> del x[20:] >>> x # [1, 4, 7, 10, 13] # Индексы опущены >>> del x[:] >>> x # [] # Вложенные последовательности >>> x = [[1, 4, 7, 10], [13, 16, 19]] >>> del x[0][1:4] >>> x # [[1], [13, 16, 19]] 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Изменение/замена элемента списка по индексу
  • Изменение части списка операцией среза
  • Изменение списка срезом c заданным шагом
  • Удаление части списка операцией среза
  • Удаление части списка по срезу с заданным шагом
  • Метод list.append(), добавляет значение в конец списка
  • Метод list.clear(), очищает список
  • Метод list.copy(), копия списка
  • Метод list.extend(), расширяет список другой последовательностью
  • Расширение списка его содержимым
  • Метод list.insert(), вставить элемент по индексу
  • Метод list.pop(), получение с удалением элемент списка
  • Метод list.remove(), удаление элемента списка по значению
  • Метод list.reverse(), разворачивает элементы списка
  • Удаление элемента списка по индексу
  • Удаление дубликатов из списка Python с сохранением очередности

Как удалить элемент массива в питоне?

Код не работает, т.к. инструкция del не удаляет элемент, а уменьшает число ссылок на него на 1, del a означает, что нужно уменьшить число ссылок на элемент списка, на который ссылается a , но т.к. в списке остается ссылка на этот элемент, то он никуда не удаляется.

Отслеживать
ответ дан 19 фев 2012 в 15:43
616 3 3 серебряных знака 8 8 бронзовых знаков

Странная логика у вашего скрипта =). Но всеже.

Во время итерации по массивам в питоне не допускается удаление элементов. Для этого либо сделайте копию списка — massiv[:], либо итерируйте по старинке — по индексам. В случае индексов вы получаете доступ к элементам исходного массива.

massiv = ['12', '123', '1234'] for i in range(len(massiv) - 1): for j in range(len(massiv) - 1): if len(massiv[i]) > len(massiv[j]): del massiv[j] elif len(massiv[i]) < len(massiv[j]): del massiv[i] print massiv # =>['1234'] 

Отслеживать
ответ дан 19 фев 2012 в 17:07
629 4 4 серебряных знака 7 7 бронзовых знаков

1- ваш код ведёт к IndexError для другого ввода 2- код у автора вопроса не удаляет элементы из массива (ни одного). См. объяснение в ответе @l0ki 4- это не рекомендуется, но можно удалять элементы во время итерации (достаточно просто в обратном порядке обходить список, см. пример кода в конце моего ответа) 3- алгоритм у вас кубический, что гораздо хуже линейного решения: lst[:] = [max(lst, key=len)]

24 янв 2017 в 13:12

maxlen= max([len(i) for i in massiv]) massiv=filter(lambda x: len(x)=maxlen, massiv)

Отслеживать
ответ дан 19 фев 2012 в 17:05
17.9k 3 3 золотых знака 47 47 серебряных знаков 86 86 бронзовых знаков

for a in massiv: for b in massiv: if len(a)> len(b): massiv.remove(b) elif len(a) 

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

P.S: пишите подробнее суть задачи и проблемы 😉

Отслеживать
51.4k 87 87 золотых знаков 267 267 серебряных знаков 505 505 бронзовых знаков
ответ дан 19 фев 2012 в 13:05
Александр Молофеев Александр Молофеев
2,346 14 14 серебряных знаков 19 19 бронзовых знаков
Рискованный код. .remove(a) удаляет первое вхождение a.
19 фев 2012 в 13:16

for a in massiv и выдаст первый встречный элемент.. риск нулевой если не допускать семнтических ошибок)))

19 фев 2012 в 13:19

for a in massiv -- перебор списка. Причём тут "первый встречный"? И первый, и второй, и третий. Просто при разных значениях massiv последовательность удалений будет весьма причудливой. Возможно правильной, но к человеку, который заставит меня в этом разбираться, я вряд ли буду относиться как к другу. Код -- удаление всех элементов длиной меньше максимальной. Возможно работает, но ну его нафиг.

19 фев 2012 в 13:39

Чтобы удалить элемент из списка lst , если известен его индекс i :

del lst[i] 

Чтобы удалить все элементы, кроме элемента с наибольшей длиной:

lst[:] = [max(lst, key=len)] 

Идиоматический способ удалить элементы из списка, удовлетворяющие заданному условию, собрать элементы, которые следует оставить и заменить ими все элементы в списке:

lst[:] = [item for item in lst if keep(item)] 

Отслеживать
ответ дан 28 ноя 2016 в 20:21
52.3k 11 11 золотых знаков 110 110 серебряных знаков 312 312 бронзовых знаков
а почему не lst[:] = filter(keep, lst)
5 фев 2018 в 11:29

@AndrioSkur: если у вас уже есть функция, то можно filter() использовать, но чаще просто выражение есть типа: if item and item[0] -- в этом случае лучше list comprehension использовать вместо filter + lambda.

5 фев 2018 в 13:05

  • Во-первых, это кортеж или статический массив?
  • Во-вторых, a и b - это не элементы, это просто моментальное представление.

Должно так быть:

for a in massiv: for b in massiv: if len(a)> len(b): del massiv[b] elif len(a) 

Отслеживать
51.4k 87 87 золотых знаков 267 267 серебряных знаков 505 505 бронзовых знаков
ответ дан 19 фев 2012 в 12:56
Даниил Колясников Даниил Колясников
441 3 3 золотых знака 11 11 серебряных знаков 26 26 бронзовых знаков
Спасибо модераторам за то , что они неоформленную каку превращают в прекрасную конфетку
19 фев 2012 в 13:07
К сожалению код из примера неверен. a и b не являются индексами списка massiv
19 фев 2012 в 13:12

alexlz прав: если a или b не являются числами получим такую неприятность как: Type Error: list indices must be int not string или какой там тип данных у вас. а если там будет все таки число ТО сразу получаем невозможность получить len(integer) но даже если и получите каким-то неведомым образом вы удалите элемент по индексу, а не значению как предполагает задача топика.. при чем такой индекс может просто и не существовать в массиве от сюда получаем list index out of range читаем про изменяемые переменные в python

Как удалить элемент массива в Python?

В этой статье мы поговорим о том, как удалить элемент из массива в Python. Для демонстрации одного из примеров воспользуемся модулем array, определяющим массивы в «Питоне». Перед началом работы необходимо импортировать соответствующую библиотеку. Это делается путём добавления в файл программы строки from array import *.

Итак, представим, что у нас есть массив со следующим содержимым:

 
from array import * otus_massiv = array('i', [1, 2, 3, 4, 5]) print(otus_massiv)

Обратите внимание, что функция array принимает 2 аргумента. Первый — тип создаваемого массива, второй — начальный список значений (в качестве начального списка значений задали простейший набор чисел от 1 до 5). Что касается i, то в нашем случае — это целое знаковое число, которое занимает 2 байта памяти. Кстати, код типа может быть и другим, например, однобайтовым символом (с) или 4-байтовым числом с плавающей точкой (f).

1-20219-210963.png

Идём дальше. Удаление элементов в массиве Python может выполняться двумя способами: • pop() — удаление элемента по индексу; • remove() — удаление элемента по значению.

Рассмотрим каждый из них подробнее.

Удаляем элемент в массиве Python с помощью pop()

Операция по удалению выполняется предельно просто:

 
from array import * otus_massiv = array('i', [1, 2, 3, 4, 5]) otus_massiv.pop(2) # удаляем элемент с индексом 2 print(otus_massiv)

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

 
array('i', [1, 2, 4, 5])

Обратите внимание, что код выше удаляет число 3, т. к. индексация элементов в Python-массиве начинается с нуля.

Если же нам нужно удалить последний элемент из массива, просто не пишите никакой индекс в методе pop() :

 
from array import * otus_massiv = array('i', [1, 2, 3, 4, 5]) otus_massiv.pop() # метод удаляет последний элемент массива print(otus_massiv)
 
array('i', [1, 2, 3, 4])

А теперь давайте проделаем ту же операцию, но без модуля array, представив одномерный массив в виде простейшего списка элементов в Python:

 
otus_massiv = [1, 2, 3, 4, 5] otus_massiv.pop(2) print(otus_massiv)
 
[1, 2, 4, 5]

Как видите, здесь тоже всё предельно просто.

Удаляем элемент в массиве Python с помощью remove()

В некоторых случаях мы не знаем точный индекс элемента в массиве в Python, зато знаем имя элемента. Допустим, речь идёт о следующем одномерном массиве (для удобства сразу отобразим его в виде списка):

 
otus_massiv = ["online", "courses", "for", "professionals"] print(otus_massiv)

Как удалить здесь, к примеру, элемент “online”? Для этого нам пригодится метод remove() :

 
otus_massiv = ["online", "courses", "for", "professionals"] if "online" in otus_massiv: otus_massiv.remove("online") print(otus_massiv)

В результате слово “online” из нашего массива будет удалено:

 
['courses', 'for', 'professionals']

На этом всё, надеюсь, этот материал был вам полезен.

Хотите знать про Python гораздо больше? Записывайтесь на наш курс для продвинутых разработчиков:

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

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