Видалення елементів зі списку (масиву) в Python: clear(), pop(), remove(), del

Бізнес

Щоб видалити елемент зі списку (масиву) типу list у Python, використовуйте методи списку clear(), pop() і remove(). Ви також можете вказати позицію та діапазон списку за допомогою індексу або фрагмента, а потім видалити його за допомогою оператора del.

Тут наведено наступну інформацію.

  • Видаліть усі елементи:clear()
  • Видаліть елемент у вказаній позиції та отримайте його значення.:pop()
  • Шукає елементи із зазначеним значенням і видаляє перший елемент.:remove()
  • Видалення шляхом вказівки позиції та діапазону в індексному фрагменті:del
  • Пакетне видалення кількох елементів, які відповідають критеріям.:індикація включення до списку

Зауважте, що списки можуть зберігати дані різних типів і строго відрізняються від масивів. Використовуйте масив (стандартна бібліотека) або 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()

Метод list 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']

Якщо ви хочете видалити повторювані елементи, використовуйте тип набору.

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