Использование фигурных скобок для инициализации набора


Я изучаю python, и у меня есть вопрос новичка об инициализации наборов. Через тестирование, я обнаружил, что набор может быть инициализирован следующим образом:

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

есть ли недостатки такого способа, в отличие от стандартного способа:

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

или это просто вопрос стиля?

3 64

3 ответа:

есть две очевидные проблемы с набором литерального синтаксиса:

my_set = {'foo', 'bar', 'baz'}
  1. он не доступен до Python 2.7

  2. невозможно выразить пустой набор с помощью этого синтаксиса (используя {} создает пустой словарь)

Они могут быть или не быть важны для вас.

раздел документов, описывающих этот синтаксис, является здесь.

сравните также разницу между {} и set() С одним аргументом слово.

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

, а как a и b наборы конечно.

С Python 3 documentation (то же самое относится и к python 2.7):

фигурные скобки или функцию set () можно использовать для создания наборов. Отмечать: чтобы создать пустой набор, Вы должны использовать set(), а не {}; последний создает пустой словарь, структуру данных, которую мы обсуждаем в разделе следующая секция.

в python 2.7:

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

имейте в виду, что {} также используется для map/dict:

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

можно также использовать комплексный синтаксис для инициализации устанавливает:

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