web-dev-qa-db-fra.com

Utilisez des accolades pour initialiser un ensemble dans Python

J'apprends le python et j'ai une question de novice sur l'initialisation des ensembles. Lors de tests, j'ai découvert qu'un ensemble peut être initialisé comme suit:

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

Y a-t-il des inconvénients à le faire de cette façon, par opposition à la méthode standard de:

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

ou est-ce juste une question de style?

85
fvrghl

La syntaxe d'ensemble littéral pose deux problèmes évidents:

my_set = {'foo', 'bar', 'baz'}
  1. Il n'était pas disponible avant Python 2.7

  2. Il n’ya aucun moyen d’exprimer un ensemble vide en utilisant cette syntaxe (en utilisant {} crée un dict vide

Ceux-ci peuvent ou peuvent ne pas être importants pour vous.

La section de la documentation décrivant cette syntaxe est ici .

85
bgporter

Comparez également la différence entre {} Et set() avec un seul argument Word.

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

mais a et b sont bien sûr des ensembles.

39
Thruston

Depuis documentation Python (), il en va de même pour python 2.7 ):

Des accolades ou la fonction set () peuvent être utilisés pour créer des ensembles. Remarque: pour créer un ensemble vide, vous devez utiliser set (), pas {}; ce dernier crée un dictionnaire vide, une structure de données dont nous parlerons dans la section suivante.

dans python 2.7:

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

Soit conscient que {} est également utilisé pour map/dict:

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

On peut également utiliser une syntaxe complète pour initialiser des ensembles:

>>> 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', '{', '}'])
26
0x90