[Python] Differenze tra liste e insiemi (era: Re: or)

Marco Buttu mbuttu a oa-cagliari.inaf.it
Dom 30 Mar 2014 14:22:47 CEST


On 03/29/2014 07:53 PM, Nicola Larosa wrote:
> Daniele Zambelli wrote:
>> La differenza fondamentale è che in un insieme gli elementi
>> non sono ripetuti.
>
> Quella è una. Un'altra è che non sono ordinati. 

Un'altra differenza rispetto alle liste e' che gli elementi di un set 
devono essere immutabili:

 >>> myset = {1, 2}
 >>> myset = {1, [2]} # Errore, [2] e' mutabile
Traceback (most recent call last):
     ...
TypeError: unhashable type: 'list'

Visto che i set sono mutabili, questo implica ad esempio che non possono 
essere usati come chiavi di un dizionario, e implica anche che un set 
non puo' contenere un set:

 >>> {1, {'a'}}
Traceback (most recent call last):
     ...
TypeError: unhashable type: 'set'

Una lista invece puo' contenere qualsiasi oggetto, per cui anche 
un'altra lista:

 >>> [1, ['a']]
[1, ['a']]

Esistono anche i set immutabili :) Sono istanze del tipo built-in 
frozenset, e non esiste un letterale che li rappresenti, per cui vanno 
creati chiamando direttamente la classe frozenset:

 >>> fset = frozenset(('a', 0, 3, 'b', 'c'))
 >>> {1, fset} # Set contenente un set (frozenset)
set([frozenset(['a', 0, 'c', 3, 'b']), 1])
 >>> fset = frozenset(('a', 0, 3, 'b', 'c'))
 >>> mydic = {1: 'uno', fset: 'foooo'}

-- 
Marco Buttu

INAF-Osservatorio Astronomico di Cagliari
Via della Scienza n. 5, 09047 Selargius (CA)
Phone: 070 711 80 217
Email: mbuttu a oa-cagliari.inaf.it



Maggiori informazioni sulla lista Python