On 18/09/2013 17:00, Piergiuliano Bossi wrote:
2013/9/18 Marco Beri <marcob...@gmail.com <mailto:marcob...@gmail.com>>

    2013/9/18 Piergiuliano Bossi <pgbo...@gmail.com
    <mailto:pgbo...@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:
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a