Пустой литерал множества?
[]
обозначает пустой список
()
обозначает пустой кортеж
{}
обозначает пустой словарь
Существует ли аналогичная нотация для пустого множества
? Или мне нужно использовать set()
?
3 ответ(ов)
Чтобы расширить принятый ответ:
Начиная с версии 2.7
и 3.1
, в Python появился литерал set
в виде {}
, который можно использовать следующим образом: {1,2,3}
. Однако {}
по-прежнему используется для обозначения пустого словаря.
В Python 2.7 (первая строка недействительна в Python <2.7):
>>> {1,2,3}.__class__
<type 'set'>
>>> {}.__class__
<type 'dict'>
В Python 3.x:
>>> {1,2,3}.__class__
<class 'set'>
>>> {}.__class__
<class 'dict'>
Дополнительную информацию можно найти здесь: https://docs.python.org/3/whatsnew/2.7.html#other-language-changes
Это зависит от того, хотите ли вы использовать "пустой" набор для сравнения или для присваивания.
Если вы хотите очистить существующий набор, то можете использовать метод .clear()
, особенно если хотите избежать создания нового объекта. Если же ваша цель - провести сравнение, используйте set()
или проверьте, равен ли длина 0.
Пример:
# создаем новый набор
a = set([1, 2, 3, 'foo', 'bar'])
# или, используя литерал:
a = {1, 2, 3, 'foo', 'bar'}
# создаем пустой набор
a = set()
# или используем метод clear
a.clear()
# сравнение с новым пустым набором
if a == set():
# делаем что-то
# проверка длины
if len(a) == 0:
# делаем что-то
Добавляя к безумным идеям: в Python 3, который принимает юникодные идентификаторы, вы можете объявить переменную ϕ = frozenset()
, где ϕ — это U+03D5, и использовать её вместо обычных имен переменных. Это действительно возможно, но стоит учитывать, что такой подход может значительно ухудшить читаемость кода и его поддержку. Поэтому перед использованием юникодных идентификаторов стоит хорошо взвесить все "за" и "против".
Получить различия между двумя списками с уникальными элементами
Как получить элемент из множества без его удаления?
Почему [] быстрее, чем list()?
Преобразование списка словарей в DataFrame pandas
Как отменить последнюю миграцию?