23

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

12

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

Я нашел метод list.remove(), но он медленно просматривает список в поисках элемента по значению.

5 ответ(ов)

9

Вы, вероятно, хотите использовать метод 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']
0

Если вам нужно удалить элементы на конкретных позициях в списке, таких как 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]]

Этот код создаст новый список, исключая элементы на указанных позициях.

0

Вопрос уже поднимал, как удалить один элемент из списка и какие преимущества имеют различные методы. Однако стоит отметить, что удаление нескольких элементов может привести к ошибкам:

>>> 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]

Таким образом, при удалении элементов, начиная с наибольшего индекса, вы избегаете нежелательных эффектов от изменения длины списка.

0

Это зависит от того, что вы хотите сделать.

Если вы хотите вернуть элемент, который удаляете, используйте 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:]).

0

Еще один способ удаления элемента(ов) из списка по индексу.

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. Когда мы присваиваем эту часть списка пустой список ([]), указанные элементы удаляются.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь