Frozenset in Python (2)
Super Kai (Kazuya Ito)

Super Kai (Kazuya Ito) @hyperkai

About: I'm a web developer. Buy Me a Coffee: ko-fi.com/superkai SO: stackoverflow.com/users/3247006/super-kai-kazuya-ito X(Twitter): twitter.com/superkai_kazuya FB: facebook.com/superkai.kazuya

Joined:
Oct 21, 2021

Frozenset in Python (2)

Publish Date: Oct 8
0 0

Buy Me a Coffee

*Memo:

A frozenset can be iterated with a for statement as shown below:

<1D frozenset>:

for x in frozenset([10, 20, 30, 40, 50]):
    print(x)
# 40
# 10
# 50
# 20
# 30
Enter fullscreen mode Exit fullscreen mode

<2D frozenset>:

for x in frozenset([frozenset([10, 20, 30, 40]),
                    frozenset([50, 60, 70, 80])]):
    for y in x:
        print(y)
# 40
# 10
# 20
# 30
# 80
# 50
# 60
# 70
Enter fullscreen mode Exit fullscreen mode

<3D frozenset>:

for x in frozenset([frozenset([frozenset([10, 20]),
                               frozenset([30, 40])]),
                    frozenset([frozenset([50, 60]),
                               frozenset([70, 80])])]):
    for y in x:
        for z in y:
            print(z)
# 40
# 30
# 10
# 20
# 80
# 70
# 50
# 60
Enter fullscreen mode Exit fullscreen mode

A frozenset can be unpacked with an assignment and for statement, function and * but not with ** as shown below:

v1, v2, v3 = frozenset([0, 1, 2])

print(v1, v2, v3)
# 0 1 2
Enter fullscreen mode Exit fullscreen mode
v1, *v2, v3 = frozenset([0, 1, 2, 3, 4, 5])

print(v1, v2, v3)  # 0 [1, 2, 3, 4] 5
print(v1, *v2, v3) # 0 1 2 3 4 5
Enter fullscreen mode Exit fullscreen mode
for v1, v2, v3 in frozenset([frozenset([0, 1, 2]), frozenset([3, 4, 5])]):
    print(v1, v2, v3)
# 3 4 5
# 0 1 2
Enter fullscreen mode Exit fullscreen mode
for v1, *v2, v3 in frozenset([frozenset([0, 1, 2, 3, 4, 5]),
                              frozenset([6, 7, 8, 9, 10, 11])]):
    print(v1, v2, v3)
    print(v1, *v2, v3)
# 6 [7, 8, 9, 10] 11
# 6 7 8 9 10 11
# 0 [1, 2, 3, 4] 5
# 0 1 2 3 4 5
Enter fullscreen mode Exit fullscreen mode
print(*frozenset([0, 1]), 2, *frozenset([3, 4, *frozenset([5])]))
# 0 1 2 3 4 5
Enter fullscreen mode Exit fullscreen mode
print(frozenset([*frozenset([0, 1]), 2,
                 *frozenset([3, 4, *frozenset([5])])]))
# frozenset({0, 1, 2, 3, 4, 5})
Enter fullscreen mode Exit fullscreen mode
def func(p1='a', p2='b', p3='c', p4='d', p5='e', p6='f'):
    print(p1, p2, p3, p4, p5, p6)

func()
# a b c d e f

func(*frozenset([0, 1, 2, 3]), *frozenset([4, 5]))
# 0 1 2 3 4 5
Enter fullscreen mode Exit fullscreen mode
def func(p1='a', p2='b', *args):
    print(p1, p2, args)
    print(p1, p2, *args)
    print(p1, p2, ['A', 'B', *args, 'C', 'D'])

func()
# a b ()
# a b Nothing
# a b ['A', 'B', 'C', 'D']

func(*frozenset([0, 1, 2, 3]), *frozenset([4, 5]))
# 0 1 (2, 3, 4, 5)
# 0 1 2 3 4 5
# 0 1 ['A', 'B', 2, 3, 4, 5, 'C', 'D']
Enter fullscreen mode Exit fullscreen mode

frozenset() can create a frozenset with or without an iterable as shown below:

*Memo:

  • The 1st argument is iterable(Optional-Default:()-Type:Iterable):
    • Don't use iterable=.
# Empty frozenset
print(frozenset())
print(frozenset(()))
# frozenset()

print(frozenset([0, 1, 2, 3, 4]))                      # list
print(frozenset((0, 1, 2, 3, 4)))                      # tuple
print(frozenset(iter([0, 1, 2, 3, 4])))                # iterator
print(frozenset({0, 1, 2, 3, 4}))                      # set
print(frozenset(frozenset([0, 1, 2, 3, 4])))           # frozenset
print(frozenset(range(5)))                             # range
# frozenset({0, 1, 2, 3, 4})

print(frozenset({'name': 'John', 'age': 36}))          # dict
print(frozenset({'name': 'John', 'age': 36}.keys()))   # dict.keys()
# frozenset({'age', 'name'})

print(frozenset({'name': 'John', 'age': 36}.values())) # dict.values()
# frozenset({'John', 36})

print(frozenset({'name': 'John', 'age': 36}.items()))  # dict.items()
# frozenset({('name', 'John'), ('age', 36)})

print(frozenset('Hello'))                              # str
# frozenset({'o', 'l', 'e', 'H'})

print(frozenset(b'Hello'))                             # bytes
print(frozenset(bytearray(b'Hello')))                  # bytearray
# frozenset({72, 108, 101, 111})
Enter fullscreen mode Exit fullscreen mode

A frozenset comprehension can create a frozenset as shown below:

<1D frozenset>:

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

A = frozenset(x**2 for x in sample)

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

<2D frozenset>:

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

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

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

<3D frozenset>:

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

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

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

Be careful, a big frozenset gets MemoryError as shown below:

A = range(1000000000)

print(frozenset(A))
# MemoryError
Enter fullscreen mode Exit fullscreen mode
A = frozenset([x for x in range(1000000000)])
# MemoryError
Enter fullscreen mode Exit fullscreen mode

Comments 0 total

    Add comment