Чтобы удалить элемент из списка (массива) типа list в Python, используйте методы list clear(), pop() и remove(). Вы также можете указать позицию и диапазон списка с помощью index или slice, а затем удалить его с помощью оператора del.
Здесь представлена следующая информация.
- Удалите все элементы:
clear()
- Удалить элемент в указанной позиции и получить его значение.:
pop()
- Ищет элементы с указанным значением и удаляет первый элемент.:
remove()
- Удаление с указанием позиции и диапазона в индексном срезе:
del
- Пакетное удаление нескольких элементов, соответствующих критериям.:признак включения в список
Обратите внимание, что списки могут хранить данные разных типов и строго отличаются от массивов. Используйте array (стандартная библиотека) или NumPy, если вы хотите работать с массивами для процессов, требующих размер памяти или адрес памяти, или для численных вычислений больших данных.
- Удалите все элементы: clear()
- Удалить элемент в указанной позиции и получить его значение.: pop()
- Ищет элементы с указанным значением и удаляет первый элемент.: remove()
- Удаление с указанием позиции и диапазона в индексном срезе: del
- Пакетное удаление нескольких элементов, соответствующих критериям.: признак включения в список
Удалите все элементы: 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]
Более подробную информацию о нарезке см. в следующей статье.
Пакетное удаление нескольких элементов, соответствующих критериям.: признак включения в список
Процесс удаления элементов, удовлетворяющих условиям, эквивалентен процессу оставления (извлечения) элементов, не удовлетворяющих условиям. Для такой обработки используется нотация понимания списка.
- Похожие статьи:Использование нотации понимания списков в Python
Пример удаления четных или нечетных элементов (= оставление четных или нечетных элементов) показан ниже.%
Это оператор остатка.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']