[Python] Il dilemma degli array mutabili
Lorenzo Sutton
lorenzofsutton a gmail.com
Mer 18 Set 2013 17:07:53 CEST
On 18/09/2013 17:00, Piergiuliano Bossi wrote:
> 2013/9/18 Marco Beri <marcoberi a gmail.com <mailto:marcoberi a gmail.com>>
>
> 2013/9/18 Piergiuliano Bossi <pgbossi a gmail.com
> <mailto:pgbossi a gmail.com>>
>
> 2) non usate liste, ma tuple, ma poi come compensate la mancanza
> di append e remove (sembra una contraddizione in termini ma non
> lo e', basterebbe che append e remove ritornino nuove strutture
> dati, copie dell'originale)
>
>
> Premetto che questa cosa dei parametri immutabili non è risolvibile
> come vorresti tu.
>
>
> Ad ogni modo un append immutabile è come se ci fosse:
> >>> a = (1, 2, 3, 4)
> >>> a += (5, 6) # Appendi due elementi ad una copia della vecchia
> sequence
> >>> a
> (1, 2, 3, 4, 5, 6)
>
>
> La remove è in effetti un po' più rognosa e bruttina:
>
> >>> a = (1, 2, 3, 4, 5)
> >>> a = a[:3] + a[3+1:] # Rimuove il terzo elemento da una copia
> della vecchia sequence
> >>> a
> (1, 2, 3, 5)
>
>
>
> Beh, non male, potrei scrivermi dei metodi che fanno queste cose in un
> modo un po' piu' esplicito, ma l'idea c'e'. Eg: remove((1, 2, 3, 4, 5),
> 3) == (1, 2, 3, 5)
Forse anche questi potreberro esserti utili...? :-)
>>> t = (1,2,3,4,5)
>>> t[:-1] # Simil pop
(1, 2, 3, 4)
>>> t[::-1] # Simil reverse
(5, 4, 3, 2, 1)
>>> # Simil remove (in effetti non bellissimo...)
>>> t[:t.index(2)] + t[t.index(2)+1:]
(1, 3, 4, 5)
>>> # Stesso errore di list se provi a rimuovere qualcosa che non c'è
>>> t[:t.index(100)] + t[t.index(100) +1:]
Traceback (most recent call last):
File "<pyshell#131>", line 1, in <module>
t[:t.index(100)] + t[t.index(100) +1:]
ValueError: tuple.index(x): x not in tuple
Lorenzo
PS:
Maggiori informazioni sulla lista
Python