2013-06-28 18 views
54

Uczę się Pythona i mam nowicjuszkę o inicjowaniu zestawów. Poprzez badania, odkryłem, że zestaw można zainicjować tak:Używanie nawiasów klamrowych do inicjowania zestawu

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

Czy są jakieś wady robi to w ten sposób, w przeciwieństwie do standardowego sposobu:

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

lub jest to tylko kwestia stylu?

+1

Dokumentacja wspomina o tym, po prostu nie istnieje. Zauważ, że jest to dokumentacja dla przestarzałego modułu, zestawy * real * są teraz wbudowane. Jest to w dokumencie "Co nowego w Pythonie 2.7", a odniesienie do języka krótko je opisuje: http://docs.python.org/2/reference/expressions.html#set-displays – delnan

+0

@delnan Używam Pythona 2.7, więc Nie pomyślałem, aby spojrzeć w python 3 dokumenty. Opublikowany przeze mnie link ma 2.7, ale dziwnie o tym nie wspomina. – fvrghl

+1

Od czasu edycji mojego komentarza, 2.7 dokumenty również wspominają o tym. Opublikowany link jest nieaktualny, relikt przeszłości, zły, przestarzały.Zapomnij, że to istnieje i używaj tego, co sam zaleca, aby użyć zamiast niego: http://docs.python.org/2/library/stdtypes.html#set i http://docs.python.org/2/library/stdtypes .html # frozenset – delnan

Odpowiedz

51

Istnieją dwa oczywiste problemy z zestawem składni dosłownym:

my_set = {'foo', 'bar', 'baz'} 
  1. to nie jest dostępne przed Pythonie 2.7

  2. Nie ma sposobu, aby wyrazić pusty zbiór, używając tej składni (używając {} tworzy pusty tekst)

Te mogą lub może nie być dla ciebie ważna.

Sekcja dokumentów opisujących tę składnię to here.

16

Od Python 3 documentation (to samo dla Pythona 2.7):

nawiasy klamrowe lub set() Funkcja ta może być używana do tworzenia zestawów. Uwaga: , aby utworzyć pusty zestaw, musisz użyć funkcji set(), a nie {}; ten ostatni tworzy pusty słownik, strukturę danych, którą omówimy w następnym rozdziale.

w Pythonie 2.7:

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

mieć świadomość, że {} jest także wykorzystywany do map/dict:

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

Można wykorzystać zestawy ze zrozumieniem:

>>> 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 porównywać także różnice między {} i set() za pomocą pojedynczego argumentu.

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

ale zarówno a i b są zestawy oczywiście.

+2

dlatego lubię przypominać sobie ustawionego konstruktora jako 'set ([]) 'zamiast po prostu' set() '. –

+0

'set()' zawsze przyjmuje pojedynczy argument. Pojedynczy iterable. –

Powiązane problemy