Пустое множество буквально? - PullRequest
387 голосов
/ 26 мая 2011

[] = пусто list

() = пусто tuple

{} = пусто dict

Есть ли аналогичные обозначенияза пустую set?Или я должен написать set()?

Ответы [ 5 ]

430 голосов
/ 26 мая 2011

Нет, для пустого набора нет буквального синтаксиса. Вы должны написать set().

40 голосов
/ 26 июня 2015

Просто для расширения принятого ответа:

С версии 2.7 и 3.1 python получил set литерал {} в виде использования {1,2,3}, но {} сам по-прежнему используетсядля пустого слова.

Python 2.7 (первая строка недопустима в Python <2.7) </p>

>>> {1,2,3}.__class__
<type 'set'>
>>> {}.__class__
<type 'dict'>

Python 3.x

>>> {1,4,5}.__class__
<class 'set'>
>>> {}.__class__
<type 'dict'>

Подробнее здесь: https://docs.python.org/3/whatsnew/2.7.html#other-language-changes

32 голосов
/ 08 ноября 2017

В любом случае, , пожалуйста, используйте set(), чтобы создать пустой набор.

Но, если вы хотите произвести впечатление на людей, скажите им, что вы можете создать пустой набор, используя литералы и * с Python> = 3.5 ( см. PEP 448 ), выполнив:

>>> s = {*()}  # or {*{}} or {*[]}
>>> print(s)
set()

это в основном более сжатый способ выполнения {_ for _ in ()}, но не делайте этого.

4 голосов
/ 27 января 2014

Это зависит от того, требуется ли литерал для сравнения или для назначения.

Если вы хотите сделать существующий набор пустым, вы можете использовать метод .clear(), особенно если вы хотите избежатьсоздание нового объекта.Если вы хотите сделать сравнение, используйте set() или проверьте, равна ли длина 0.

пример:

#create a new set    
a=set([1,2,3,'foo','bar'])
#or, using a literal:
a={1,2,3,'foo','bar'}

#create an empty set
a=set()
#or, use the clear method
a.clear()

#comparison to a new blank set
if a==set():
    #do something

#length-checking comparison
if len(a)==0:
    #do something
2 голосов
/ 15 июня 2017

Добавление к сумасшедшим идеям: с Python 3, принимающим идентификаторы Unicode, вы можете объявить переменную ϕ = frozenset() (ϕ - U + 03D5) и использовать ее вместо этого.

...