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

Как удалить элемент из массива python

  • автор:

Python удаление элементов из массива

Здорова юные линуксойды! У меня такая задача нужно все четные элементы массива удалить. вот код:

for i in range(len(a)):#a-- это массив if a[i]%2==0: a.remove(a[i]) #он выводит list index out of range. Думаю это связано с удалением элемента из списка. Кто знает решение плиз помогите

levon12341
20.10.16 09:51:23 MSK

умаю это связано с удалением элемента из

эмм, напомни, в чем помощь нужна ? Очевидно что это связано с удалением. Потому что он идет по длине изначального списка (не массива, кстати), по списку который становится короче.

рекомендую просто генерировать новый. Например так

a = [x for x in a if x%2!=0] 

Dred ★★★★★
( 20.10.16 09:57:56 MSK )

Это происходит от того, что после удаления элемента массива его длина и индексы элементов ВНЕЗАПНО меняются, а предел цикла — нет.

Удалить элемент из списка, используя его индекс в Python

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

1. Использование list.pop() функция

Самый простой подход — использовать список pop([i]) функция, которая удаляет элемент, присутствующий в указанной позиции в списке. Обратите внимание, что это вызывает IndexError если список пуст.

if __name__ == ‘__main__’ :
l = [ 1 , 2 , 3 , 4 , 5 ]
value = l . pop ( n )
print ( «Removed value» , value ) # 3
print ( «Modified list» , l ) # [1, 2, 4, 5]

2. Использование del утверждение

Еще одним эффективным способом удаления элемента из списка с помощью его индекса является del утверждение. Он отличается от pop() функция, так как она не возвращает удаленный элемент. Это также повышает IndexError если список пуст.

if __name__ == ‘__main__’ :
l = [ 1 , 2 , 3 , 4 , 5 ]
print ( «Modified list» , l ) # [1, 2, 4, 5]

3. Использование нарезки

Вы даже можете использовать нарезку для удаления элемента из списка, используя его индекс. Это можно сделать с помощью выражения l[:] = l[:n] + l[n+1:] , куда l ваш список, и n это индекс, значение которого должно быть удалено. Этот подход не рекомендуется, так как он слишком многословен и создает несколько копий списка.

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

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

Код не работает, т.к. инструкция 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 золотых знака 46 46 серебряных знаков 86 86 бронзовых знаков

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

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

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

Отслеживать
51.2k 86 86 золотых знаков 266 266 серебряных знаков 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.2k 11 11 золотых знаков 108 108 серебряных знаков 311 311 бронзовых знаков
а почему не 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.2k 86 86 золотых знаков 266 266 серебряных знаков 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

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

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