2013-06-28 27 views
54

Sto imparando Python e ho una domanda inesperta sull'inizializzazione dei set. Attraverso test, ho scoperto che un insieme può essere inizializzato in questo modo:Utilizzo di parentesi graffe per inizializzare Set

my_set = {'foo', 'bar', 'baz'} 

Esistono svantaggi di fare in questo modo, in contrasto con il modo standard di:

my_set = set(['foo', 'bar', 'baz']) 

o è è solo una questione di stile?

+1

La documentazione lo menziona, proprio non lì. Si noti che questa è la documentazione per un modulo deprecato, gli * set * reali sono ora incorporati. È nel documento "Novità in Python 2.7" e il riferimento al linguaggio lo descrive brevemente: http://docs.python.org/2/reference/expressions.html#set-displays – delnan

+0

@delnan Io uso python 2.7, quindi Non ho pensato di cercare nei documenti di Python 3. Il link che ho postato è per 2.7, ma stranamente non lo menziona. – fvrghl

+1

Da quando ho modificato il mio commento, anche i 2.7 documenti lo menzionano. Il link che hai postato è obsoleto, una reliquia del passato, sbagliato, deprecato.Dimentica che esiste e usa quello che ti dice di usare invece: http://docs.python.org/2/library/stdtypes.html#set e http://docs.python.org/2/library/stdtypes .html # frozenset – delnan

risposta

51

Ci sono due problemi evidenti con la sintassi letterale set:

my_set = {'foo', 'bar', 'baz'} 
  1. non è disponibile prima di Python 2.7

  2. Non c'è modo per esprimere un insieme vuoto utilizzando che la sintassi (usando {} crea un dict vuoto)

Questi possono o potrebbe non essere importante per te.

La sezione dei documenti che descrive questa sintassi è here.

16

Da Python 3 documentation (lo stesso vale per pitone 2,7):

parentesi graffe o set() può essere usato per creare insiemi. Nota: per creare un set vuoto da utilizzare set(), non {}; il secondo crea un dizionario vuoto, una struttura dati che discuteremo nella prossima sezione di .

in python 2.7:

>>> my_set = {'foo', 'bar', 'baz', 'baz', 'foo'} 
>>> my_set 
set(['bar', 'foo', 'baz']) 

essere consapevoli del fatto che {} è utilizzato anche per map/dict:

>>> m = {'a':2,3:'d'} 
>>> m[3] 
'd' 
>>> m={} 
>>> type(m) 
<type 'dict'> 

Si può utilizzare i set di comprensione:

>>> a = {x for x in """didn't know about {} and sets """ if x not in 'set' } 
>>> a 
set(['a', ' ', 'b', 'd', "'", 'i', 'k', 'o', 'n', 'u', 'w', '{', '}']) 
28

C ompare anche la differenza tra {} e set() con un solo argomento di parole.

>>> a = set('aardvark') 
>>> a 
{'d', 'v', 'a', 'r', 'k'} 
>>> b = {'aardvark'} 
>>> b 
{'aardvark'} 

ma entrambi a e b sono insiemi di corso.

+2

è per questo che mi piace ricordare a me stesso il set costruttore come 'set ([]) 'piuttosto che solo' set() '. –

+0

'set()' prende sempre un singolo argomento. Un singolo iterabile. –

Problemi correlati