La risposta dipende dalla semantica desiderata di a - b
.
Se si desidera solo i primi elementi, quindi affettare è il modo naturale per farlo:
In [11]: a = [1, 2, 3]
In [12]: b = [4 , 5]
In [13]: ab = a + b
In [14]: ab[:len(a)]
Out[14]: [1, 2, 3]
Se, d'altra parte, si desidera rimuovere elementi della prima lista non trovato nella seconda lista:
In [15]: [v for v in ab if v not in b]
Out[15]: [1, 2, 3]
Il secondo tipo di operazione è naturalmente più espressi utilizzando insiemi:
In [18]: set(ab) - set(b)
Out[18]: set([1, 2, 3])
Nota che generalmente questo non preserva l'ordinamento degli elementi (poiché gli insiemi non sono ordinati). Se ordine è importante, e b
rischia di essere lungo, convertendo b
in un set può migliorare le prestazioni:
In [19]: bset = set(b)
In [20]: [v for v in ab if v not in bset]
Out[20]: [1, 2, 3]
per i dizionari, esiste già un'operazione "aggiunta" in-place. Si chiama dict.update()
.
Quale sarebbe il risultato per '[1, 2, 3, 1, 2, 1] - [1, 2]'? – JJJ
@Juhana Domanda brillante. Sarebbe: [3]. – dublintech
Quindi direi perché non '[3, 1, 2, 1]'? –