Uso avanzato delle liste in Python
Scritto il da Timendum
Mi dimentico sempre che le list in Python possono essere fare molto di più che un array classico.
Quindi qualche schema per ricordarmi come funziona.
Metodi
pop
Con pop si possono riumuovere anche elementi in mezzo alla lista.
>>> a = [10, 11, 12, 13, 14]
>>> a.pop(3)
13
>>> a
[10, 11, 12, 14]
remove
Invece remove riumuovere un preciso elemento, senza indice, ovviamente non lo restituisce, dovrei già averlo.
In pratica equivale a a.remove(a.index(x)), quindi lancia un ValueError se l’elemento non esiste, proprio come index.
>>> a = [10, 11, 12, 13, 14]
>>> a.remove(13)
<None>
>>> a
[10, 11, 12, 14]
insert
Infine insert aggiunge un elemento nel posto indicato, facendo slittare gli altri.
>>> a = [10, 11, 12, 13, 14]
>>> a.insert(1, 60)
<None>
>>> a
[10, 60, 11, 12, 13, 14]
Se l’indice è più grande della lunghezza della list, verrà aggiunto alla fine.
>>> a = [10, 11, 12, 13, 14]
>>> a.insert(100, 60)
<None>
>>> a
[10, 11, 12, 13, 60]
Ricette
Inserire due oggetti al posto di uno
Vogliamo ad esempio da [10, 11, 12, -1, 15] togliere -1 nel seguente array e metterci 13 e 14.
Con il primo modo, togliamo e poi inseriamo, occhio se se li inseriamo nella stessa posizione, vanno inseriti in ordine inverso, prima 14 poi 13.
>>> a = [10, 11, 12, -1, 15]
>>> a.remove(-1)
>>> a.insert(3, 14)
>>> a.insert(3, 13)
>>> a
[10, 11, 12, 13, 14, 15]
In alternativa, possono essere inseriti nell’ordine giusto, ma l’indice va incrementato.
>>> a = [10, 11, 12, -1, 15]
>>> a.remove(-1)
>>> a.insert(3, 13)
>>> a.insert(4, 14)
>>> a
[10, 11, 12, 13, 14, 15]
Oppure, possiamo sovrascrivere ed inserire, con la stessa accortezza, cioè sovrascrivere con 14 e poi inserire con 13.
>>> a = [10, 11, 12, -1, 15]
>>> a[3] = 14
>>> a.insert(3, 13)
>>> a
[10, 11, 12, 13, 14, 15]
Infine stessa alternativa di prima, inserirli nell’ordine giusto ma incrementare l’indice.
>>> a = [10, 11, 12, -1, 15]
>>> a[3] = 13
>>> a.insert(4, 14)
>>>
>>> a
[10, 11, 12, 13, 14, 15]
Invertire due elementi
Qui sempre meglio il classico “swap”.
>>> a = [10, 11, 24, 13, 42, 15]
>>> x = a[2]
>>> a[2] = a[4]
>>> a[4] = x
>>> a
[10, 11, 42, 13, 24, 15]
O in un colpo solo.
>>> a = [10, 11, 24, 13, 42, 15]
>>> a[4], a[2] = a[2], a[4]
>>> a
[10, 11, 42, 13, 24, 15]