Empty set literal?

PythonSetLiterals

Python Problem Overview


[] = empty list

() = empty tuple

{} = empty dict

Is there a similar notation for an empty set? Or do I have to write set()?

Python Solutions


Solution 1 - Python

No, there's no literal syntax for the empty set. You have to write set().

Solution 2 - Python

By all means, please use set() to create an empty set.

But, if you want to impress people, tell them that you can create an empty set using literals and * with Python >= 3.5 (see PEP 448) by doing:

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

this is basically a more condensed way of doing {_ for _ in ()}, but, don't do this.

Solution 3 - Python

Just to extend the accepted answer:

From version 2.7 and 3.1 python has got set literal {} in form of usage {1,2,3}, but {} itself still used for empty dict.

Python 2.7 (first line is invalid in Python <2.7)

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

Python 3.x

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

More here: https://docs.python.org/3/whatsnew/2.7.html#other-language-changes

Solution 4 - Python

Yes. The same notation that works for non-empty dict/set works for empty ones.

Notice the difference between non-empty dict and set literals:

{1: 'a', 2: 'b', 3: 'c'} -- a number of key-value pairs inside makes a dict
{'aaa', 'bbb', 'ccc'} -- a tuple of values inside makes a set

So:

{} == zero number of key-value pairs == empty dict
{*()} == empty tuple of values == empty set

However the fact, that you can do it, doesn't mean you should. Unless you have some strong reasons, it's better to construct an empty set explicitly, like:

a = set()

> ### Performance: > The literal is ~15% faster than the set-constructor (CPython-3.8, 2019 PC, Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz): > python > >>> %timeit ({*()} & {*()}) | {*()} > 214 ns ± 1.26 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) > > >>> %timeit (set() & set()) | set() > 252 ns ± 0.566 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) > > ... and for completeness, Renato Garcia's frozenset proposal on the above expression is some 60% faster! > python > >>> ϕ = frozenset() > > >>> %timeit (ϕ & ϕ) | ϕ > 100 ns ± 0.51 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) >

NB: As ctrueden noticed in comments, {()} is not an empty set. It's a set with 1 element: empty tuple.

Solution 5 - Python

It depends on if you want the literal for a comparison, or for assignment.

If you want to make an existing set empty, you can use the .clear() metod, especially if you want to avoid creating a new object. If you want to do a comparison, use set() or check if the length is 0.

example:

#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

Solution 6 - Python

Adding to the crazy ideas: with Python 3 accepting unicode identifiers, you could declare a variable ϕ = frozenset() (ϕ is U+03D5) and use it instead.

Solution 7 - Python

There are few ways to create empty Set in Python :

  1. Using set() method
    This is the built-in method in python that creates Empty set in that variable.
  2. Using clear() method (creative Engineer Technique LOL)
    See this Example:

    sets={"Hi","How","are","You","All"}
    type(sets)  (This Line Output : set)
    sets.clear()
    print(sets)  (This Line Output : {})
    type(sets)  (This Line Output : set)

So, This are 2 ways to create empty Set.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJohan R&#229;deView Question on Stackoverflow
Solution 1 - Pythonsepp2kView Answer on Stackoverflow
Solution 2 - PythonDimitris Fasarakis HilliardView Answer on Stackoverflow
Solution 3 - PythonReishinView Answer on Stackoverflow
Solution 4 - PythonpycoderView Answer on Stackoverflow
Solution 5 - PythonBrian MintonView Answer on Stackoverflow
Solution 6 - PythonRenato GarciaView Answer on Stackoverflow
Solution 7 - PythonMeet ShahView Answer on Stackoverflow