Использование фигурных скобок для инициализации набора
Я изучаю python, и у меня есть вопрос новичка об инициализации наборов. Через тестирование, я обнаружил, что набор может быть инициализирован следующим образом:
my_set = {'foo', 'bar', 'baz'}
есть ли недостатки такого способа, в отличие от стандартного способа:
my_set = set(['foo', 'bar', 'baz'])
или это просто вопрос стиля?
3 ответа:
есть две очевидные проблемы с набором литерального синтаксиса:
my_set = {'foo', 'bar', 'baz'}
он не доступен до Python 2.7
невозможно выразить пустой набор с помощью этого синтаксиса (используя
{}
создает пустой словарь)Они могут быть или не быть важны для вас.
раздел документов, описывающих этот синтаксис, является здесь.
сравните также разницу между
{}
и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', '{', '}'])