[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