Используйте фигурные скобки для инициализации набора в Python
Я изучаю python, и у меня есть начальный вопрос об инициализации наборов. Через тестирование я обнаружил, что набор можно инициализировать следующим образом:
my_set = {'foo', 'bar', 'baz'}
Есть ли недостатки в том, чтобы делать это таким образом, в отличие от стандартного способа:
my_set = set(['foo', 'bar', 'baz'])
или это просто вопрос стиля?
Ответы
Ответ 1
Есть две очевидные проблемы с синтаксисом set literal:
my_set = {'foo', 'bar', 'baz'}
-
Он не доступен перед Python 2.7
-
Невозможно выразить пустой набор, используя этот синтаксис (используя {}
создает пустой dict)
Те могут или не могут быть важны для вас.
Раздел документов, излагающих этот синтаксис, здесь.
Ответ 2
Сравните также разницу между {}
и set()
с одним аргументом слова.
>>> a = set('aardvark')
>>> a
{'d', 'v', 'a', 'r', 'k'}
>>> b = {'aardvark'}
>>> b
{'aardvark'}
но оба a
и b
являются наборами конечно.
Ответ 3
Из документации по Python 3 (то же самое относится к Python 2.7):
Для создания множеств можно использовать фигурные скобки или функцию set(). Примечание: чтобы создать пустой набор, вы должны использовать set(), а не {}; последний создает пустой словарь, структуру данных, которую мы обсудим в следующем разделе.
в питоне 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', '{', '}'])