DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

Set comprehension in Python

Buy Me a Coffee

*Memo:

  • My post explains a list comprehension.
  • My post explains a tuple comprehension.
  • My post explains a frozenset comprehension.
  • My post explains a dictionary comprehension.
  • My post explains a generator comprehension.
  • My post explains a set (1).

A comprehension is the concise expression to create an iterable and there are a list, tuple, set, frozenset, dictionary(dict) and generator comprehension:

<Set comprehension>:

1D set:

sample = {0, 1, 2, 3, 4, 5, 6, 7}

A = {x**2 for x in sample}

print(A)
# {0, 1, 4, 36, 9, 16, 49, 25}
Enter fullscreen mode Exit fullscreen mode

The below is without a set comprehension:

sample = {0, 1, 2, 3, 4, 5, 6, 7}

A = []

for x in sample:
    A.append(x**2)

A = set(A)

print(A)
# {0, 1, 4, 36, 9, 16, 49, 25}
Enter fullscreen mode Exit fullscreen mode
sample = {0, 1, 2, 3, 4, 5, 6, 7}

A = set()

for x in sample:
    A.add(x**2)

print(A)
# {0, 1, 4, 36, 9, 16, 49, 25}
Enter fullscreen mode Exit fullscreen mode

2D set:

sample = {frozenset([0, 1, 2, 3]), frozenset([4, 5, 6, 7])}

A = {frozenset(y**2 for y in x) for x in sample}

print(A)
# {frozenset({16, 25, 36, 49}), frozenset({0, 1, 4, 9})}
Enter fullscreen mode Exit fullscreen mode

The below is without a set comprehension:

sample = {frozenset([0, 1, 2, 3]), frozenset([4, 5, 6, 7])}

A = []

for i, x in enumerate(sample):
    A.append([])
    for y in x:
        A[i].append(y**2)
    A[i] = frozenset(A[i])

A = set(A)

print(A)
# {frozenset({16, 25, 36, 49}), frozenset({0, 1, 4, 9})}
Enter fullscreen mode Exit fullscreen mode
sample = {frozenset([0, 1, 2, 3]), frozenset([4, 5, 6, 7])}

A = set()

for x in sample:
    def func(x):
        for y in x:
            yield y**2
    A.add(frozenset(func(x)))

print(A)
# {frozenset({16, 25, 36, 49}), frozenset({0, 1, 4, 9})}
Enter fullscreen mode Exit fullscreen mode

3D set:

sample = {frozenset([frozenset([0, 1]), frozenset([2, 3])]),
          frozenset([frozenset([4, 5]), frozenset([6, 7])])}

A = {frozenset(frozenset(z**2 for z in y) for y in x) for x in sample}

print(A)
# {frozenset({frozenset({16, 25}), frozenset({49, 36})}),
#  frozenset({frozenset({9, 4}), frozenset({0, 1})})}
Enter fullscreen mode Exit fullscreen mode

The below is without a set comprehension:

sample = {frozenset([frozenset([0, 1]), frozenset([2, 3])]),
          frozenset([frozenset([4, 5]), frozenset([6, 7])])}
A = []

for i, x in enumerate(sample):
    A.append([])
    for j, y in enumerate(x):
        A[i].append([])
        for z in y:
            A[i][j].append(z**2)
        A[i][j] = frozenset(A[i][j])
    A[i] = frozenset(A[i])

A = set(A)

print(A)
# {frozenset({frozenset({16, 25}), frozenset({49, 36})}),
#  frozenset({frozenset({9, 4}), frozenset({0, 1})})}
Enter fullscreen mode Exit fullscreen mode
sample = {frozenset([frozenset([0, 1]), frozenset([2, 3])]),
          frozenset([frozenset([4, 5]), frozenset([6, 7])])}
A = set()

for x in sample:
    def func(x):
        for z, y in x:
            yield frozenset({z**2, y**2})
    A.add(frozenset(func(x)))

print(A)
# {frozenset({frozenset({16, 25}), frozenset({49, 36})}),
#  frozenset({frozenset({9, 4}), frozenset({0, 1})})}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)