2012-02-04 13 views
5

Ho una lista in cui salvataggio gli oggetti creati da una classe specifica.Python OOP - rimozione dell'istanza di classe da un elenco

Mi piacerebbe sapere, perché non riesco a risolvere questo problema, come faccio a eliminare un'istanza della classe dall'elenco?

Ciò dovrebbe avvenire in base alla conoscenza di un attributo dell'oggetto.

+1

La successiva volta dovresti aggiungere un esempio del codice che non riesci a far funzionare, accetta anche la risposta che ti ha aiutato di più nella risoluzione del problema e fai salire le votazioni utili. –

+0

Ok grazie. :) –

+0

Prego, potresti anche voler seguire alcuni dei consigli in questa [Guida allo stile per domande e risposte] (http://meta.stackexchange.com/a/18616/177799). Una domanda migliore porta a risposte migliori. –

risposta

11

scorrere l'elenco, trovare l'oggetto e la sua posizione, quindi eliminarlo:

for i, o in enumerate(obj_list): 
    if o.attr == known_value: 
     del obj_list[i] 
     break 
+1

C'è un errore di battitura: '=' invece di '=='. –

+0

@RikPoggi Grazie. Corretto – WolframH

3

si potrebbe usare una lista di comprensione:

thelist = [item for item in thelist if item.attribute != somevalue] 

Questo eliminerà tutti i voci con item.attribute == somevalue.

Se si desidera rimuovere solo uno tale elemento, quindi utilizzare WolframH's solution.

+0

Anche la funzione 'filtro' funzionerebbe, giusto? – Divya

+0

Un filtro funziona come la comprensione degli elenchi, ma in genere chiamare 'filter' è più lento di una lista di comprensione. – unutbu

1

Si potrebbe averli memorizzati in un dict e li rimosse per nome

di = {"test" : my_instance()} 
del di['test'] 
Problemi correlati