Как удалить элемент из списка по индексу
Как удалить элемент из списка по индексу?
Я нашел метод list.remove()
, но он медленно просматривает список в поисках элемента по значению.
5 ответ(ов)
Вы, вероятно, хотите использовать метод pop
:
a = ['a', 'b', 'c', 'd']
a.pop(1)
# Теперь a будет ['a', 'c', 'd']
По умолчанию, если вызвать pop
без аргументов, метод удалит последний элемент списка:
a = ['a', 'b', 'c', 'd']
a.pop()
# Теперь a будет ['a', 'b', 'c']
Если вам нужно удалить элементы на конкретных позициях в списке, таких как 2-й, 3-й и 7-й элементы, вы не сможете использовать такой код:
del my_list[2]
del my_list[3]
del my_list[7]
Потому что после удаления второго элемента, третий элемент, который вы пытаетесь удалить, на самом деле будет четвёртым элементом в исходном списке. Чтобы отфильтровать 2-й, 3-й и 7-й элементы из оригинального списка и получить новый список, вы можете использовать такой подход:
new_list = [j for i, j in enumerate(my_list) if i not in [2, 3, 7]]
Этот код создаст новый список, исключая элементы на указанных позициях.
Вопрос уже поднимал, как удалить один элемент из списка и какие преимущества имеют различные методы. Однако стоит отметить, что удаление нескольких элементов может привести к ошибкам:
>>> l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> indices = [3, 7]
>>> for i in indices:
... del l[i]
...
>>> l
[0, 1, 2, 4, 5, 6, 7, 9]
В результате выполнения данного кода из исходного списка были удалены элементы с индексами 3 и 8 (а не 3 и 7), поскольку список укоротился в процессе выполнения цикла. Это могло быть не вашим намерением.
Если вы хотите безопасно удалить несколько элементов по индексам, вам нужно сначала удалять элементы с наибольшими индексами. Вот как это можно сделать:
>>> l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> indices = [3, 7]
>>> for i in sorted(indices, reverse=True):
... del l[i]
...
>>> l
[0, 1, 2, 4, 5, 6, 8, 9]
Таким образом, при удалении элементов, начиная с наибольшего индекса, вы избегаете нежелательных эффектов от изменения длины списка.
Это зависит от того, что вы хотите сделать.
Если вы хотите вернуть элемент, который удаляете, используйте pop()
:
>>> l = [1, 2, 3, 4, 5]
>>> l.pop(2)
3
>>> l
[1, 2, 4, 5]
Однако, если вам просто нужно удалить элемент и вам не важен его возврат, используйте del
:
>>> l = [1, 2, 3, 4, 5]
>>> del l[2]
>>> l
[1, 2, 4, 5]
Кроме того, del
позволяет использовать срезы (например, del l[2:]
).
Еще один способ удаления элемента(ов) из списка по индексу.
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# Удаляем элемент по индексу 3
a[3:4] = []
# Теперь a выглядит как [0, 1, 2, 4, 5, 6, 7, 8, 9]
# Удаляем элементы с индекса 3 до индекса 6
a[3:7] = []
# Теперь a выглядит как [0, 1, 2, 7, 8, 9]
Выражение a[x:y]
выбирает элементы с индекса x
до y-1
. Когда мы присваиваем эту часть списка пустой список ([]
), указанные элементы удаляются.
Как получить последний элемент списка?
Как найти индекс элемента в списке?
Почему используется string.join(list), а не list.join(string)?
Как клонировать список, чтобы он не изменялся неожиданно после присваивания?
Как преобразовать строковое представление списка в список?