Премахване на елементи от списък (масив) в Python: clear(), pop(), remove(), del

Бизнес

За да премахнете елемент от списък (масив) от тип list в Python, използвайте методите за списъци clear(), pop() и remove(). Можете също така да зададете позицията и обхвата на списъка чрез използване на index или slice и след това да го изтриете с помощта на оператора del.

Тук се предоставя следната информация.

  • Премахване на всички елементи:clear()
  • Изтриване на елемент в зададената позиция и получаване на неговата стойност.:pop()
  • Търси елементи със зададената стойност и премахва първия елемент.:remove()
  • Изтриване чрез задаване на позиция и обхват в индексното парче:del
  • Пакетно изтриване на няколко елемента, които отговарят на критериите.:индикация за включване в списъка

Имайте предвид, че списъците могат да съхраняват данни от различни типове и се различават строго от масивите. Използвайте array (стандартна библиотека) или NumPy, когато искате да работите с масиви за процеси, които изискват размер на паметта или адрес на паметта, или за числени изчисления на големи по обем данни.

Премахване на всички елементи: clear()

В метода clear() на списъка всички елементи се премахват, в резултат на което се получава празен списък.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

l.clear()
print(l)
# []

Изтриване на елемент в зададената позиция и получаване на неговата стойност.: pop()

Методът pop() на списък може да се използва за изтриване на елемент на определена позиция и за получаване на стойността на този елемент.

Първото (начално) число е 0.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l.pop(0))
# 0

print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l.pop(3))
# 4

print(l)
# [1, 2, 3, 5, 6, 7, 8, 9]

Може да се използва и отрицателна стойност, за да се посочи позицията от края (последната). Краят (последният) е -1.

print(l.pop(-2))
# 8

print(l)
# [1, 2, 3, 5, 6, 7, 9]

Ако аргументът е пропуснат и не е посочена позиция, елементът в края (последният) се изтрива.

print(l.pop())
# 9

print(l)
# [1, 2, 3, 5, 6, 7]

Посочването на несъществуваща позиция ще доведе до грешка.

# print(l.pop(100))
# IndexError: pop index out of range

Забележете, че pop(0), която премахва първия елемент, изисква следните разходи и не е ефективна операция. Вижте следната страница в официалната уикипедия за изчислителната сложност на различни операции върху списъци.
O(n)

O(1)Типът deque е предоставен в модула за колекции на стандартната библиотека като тип, който изтрива елементи отгоре на тази цена. Например, ако искате да третирате данните като опашка (FIFO), по-ефективно е да използвате deque.

Търси елементи със зададената стойност и премахва първия елемент.: remove()

Методът remove() на списъка може да се използва за търсене на елементи със същата стойност като посочената и за премахване на първия елемент.

l = ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']

l.remove('Alice')
print(l)
# ['Bob', 'Charlie', 'Bob', 'Dave']

Ако списъкът съдържа повече от един елемент, който отговаря на зададената стойност, ще бъде премахнат само първият от тях.

l.remove('Bob')
print(l)
# ['Charlie', 'Bob', 'Dave']

Ако е зададена несъществуваща стойност, се появява грешка.

# l.remove('xxx')
# ValueError: list.remove(x): x not in list

Изтриване чрез задаване на позиция и обхват в индексното парче: del

Можете също така да използвате командата del, за да премахнете елементи от списъка.

Посочете елемента, който ще бъде изтрит, чрез неговия индекс. Първият (начален) индекс е 0, а последният (краен) индекс е -1.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[0]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[-1]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8]

del l[6]
print(l)
# [1, 2, 3, 4, 5, 6, 8]

Ако зададете диапазон с филийки, можете да изтриете няколко елемента наведнъж.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[2:5]
print(l)
# [0, 1, 5, 6, 7, 8, 9]

l = list(range(10))
del l[:3]
print(l)
# [3, 4, 5, 6, 7, 8, 9]

l = list(range(10))
del l[4:]
print(l)
# [0, 1, 2, 3]

l = list(range(10))
del l[-3:]
print(l)
# [0, 1, 2, 3, 4, 5, 6]

Възможно е също така да посочите целия диапазон и да изтриете всички елементи.

l = list(range(10))
del l[:]
print(l)
# []

[start:stop:step]Ако зададете диапазона в разреза по този начин и посочите стъпката на нарастване, можете да изтриете няколко скачащи елемента наведнъж.

l = list(range(10))
del l[2:8:2]
print(l)
# [0, 1, 3, 5, 7, 8, 9]

l = list(range(10))
del l[::3]
print(l)
# [1, 2, 4, 5, 7, 8]

За повече информация относно нарязването на филийки вижте следната статия.

Пакетно изтриване на няколко елемента, които отговарят на критериите.: индикация за включване в списъка

Процесът на премахване на елементи, които отговарят на условията, е еквивалентен на процеса на оставяне (извличане) на елементи, които не отговарят на условията. За този вид обработка се използва нотацията за разбиране на списък.

Пример за премахване на нечетни или четни елементи (= оставяне на четни или нечетни елементи) е показан по-долу.
%Това е операторът за остатък.
i % 2
Това е остатъкът от i, разделен на 2.

В нотацията за разбиране на списък се създава нов списък. За разлика от въведените досега методи за тип списък, първоначалният списък остава непроменен.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print([i for i in l if i % 2 == 0])
# [0, 2, 4, 6, 8]

print([i for i in l if i % 2 != 0])
# [1, 3, 5, 7, 9]

print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Други примери. В зависимост от условния израз е възможна разнообразна обработка.

l = ['Alice', 'Bob', 'Charlie', 'Bob', 'David']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'David']

print([s for s in l if s != 'Bob'])
# ['Alice', 'Charlie', 'David']

print([s for s in l if s.endswith('e')])
# ['Alice', 'Charlie']

Ако искате да премахнете дублиращи се елементи, използвайте типа set set.

print(list(set(l)))
# ['David', 'Alice', 'Charlie', 'Bob']
Copied title and URL