Rimuovere elementi da una lista (array) in Python: clear(), pop(), remove(), del

Attività commerciale

Per rimuovere un elemento da una lista (array) di tipo list in Python, usate i metodi clear(), pop() e remove(). Potete anche specificare la posizione e l'intervallo della lista usando index o slice e poi cancellarla usando l'istruzione del.

Le seguenti informazioni sono fornite qui.

  • Rimuovere tutti gli elementi:clear()
  • Elimina un elemento nella posizione specificata e ottiene il suo valore.:pop()
  • Cerca gli elementi con il valore specificato e rimuove il primo elemento.:remove()
  • Cancellazione specificando la posizione e l'intervallo nella fetta di indice:del
  • Elimina in batch più elementi che soddisfano i criteri.:indicazione di inclusione della lista

Notate che le liste possono memorizzare dati di diversi tipi, e sono strettamente diverse dagli array. Usate array (libreria standard) o NumPy quando volete gestire array per processi che richiedono dimensioni o indirizzi di memoria, o per calcoli numerici di dati su larga scala.

Rimuovere tutti gli elementi: clear()

Nel metodo clear() della lista, tutti gli elementi vengono rimossi, ottenendo una lista vuota.

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

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

Elimina un elemento nella posizione specificata e ottiene il suo valore.: pop()

Il metodo pop() di una lista può essere usato per cancellare un elemento in una posizione specificata e ottenere il valore di quell'elemento.

Il primo numero (iniziale) è 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]

Un valore negativo può anche essere usato per specificare la posizione dalla fine (ultima). La fine (ultima) è -1.

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

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

Se l'argomento viene omesso e non viene specificata alcuna posizione, l'elemento alla fine (ultimo) viene cancellato.

print(l.pop())
# 9

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

Specificando una posizione inesistente si otterrà un errore.

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

Si noti che pop(0), che rimuove il primo elemento, richiede il seguente costo e non è un'operazione efficiente. Vedi la seguente pagina sul wiki ufficiale per la complessità computazionale di varie operazioni sulle liste.
O(n)

O(1)Il tipo deque è fornito nel modulo collections della libreria standard come un tipo che cancella gli elementi in cima a questo costo. Per esempio, se volete trattare i dati come una coda (FIFO), è più efficiente usare deque.

Cerca gli elementi con il valore specificato e rimuove il primo elemento.: remove()

Il metodo remove() della lista può essere usato per cercare elementi con lo stesso valore specificato e rimuovere il primo elemento.

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

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

Se la lista contiene più di un elemento che corrisponde al valore specificato, solo il primo verrà rimosso.

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

Se viene specificato un valore inesistente, si verifica un errore.

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

Cancellazione specificando la posizione e l'intervallo nella fetta di indice: del

Potete anche usare l'istruzione del per rimuovere elementi dalla lista.

Specifica l'elemento da cancellare tramite il suo indice. Il primo indice (iniziale) è 0, e l'ultimo (finale) è -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]

Se si specifica un intervallo con le fette, è possibile eliminare più elementi in una volta.

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]

È anche possibile specificare l'intero intervallo e cancellare tutti gli elementi.

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

[start:stop:step]Se si specifica l'intervallo nella fetta in questo modo e si specifica il passo incrementale, è possibile eliminare più elementi di salto in una volta.

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]

Per ulteriori informazioni sull'affettare, vedere il seguente articolo.

Elimina in batch più elementi che soddisfano i criteri.: indicazione di inclusione della lista

Il processo di rimozione degli elementi che soddisfano le condizioni è equivalente al processo di lasciare (estrarre) gli elementi che non soddisfano le condizioni. La notazione di comprensione della lista è usata per questo tipo di elaborazione.

Un esempio di rimozione di elementi pari o dispari (= lasciare elementi pari o dispari) è mostrato qui sotto.
%Questo è l'operatore di resto.
i % 2
Questo è il resto di i diviso per 2.

Nella notazione di comprensione della lista, viene creata una nuova lista. A differenza dei metodi di tipo lista introdotti finora, la lista originale rimane invariata.

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]

Altri esempi. Una varietà di elaborazioni è possibile a seconda dell'espressione condizionale.

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

Se volete rimuovere gli elementi duplicati, usate il tipo set set.

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