*Memo:
A set can be iterated with a for statement as shown below:
<1D set>:
for x in {10, 20, 30, 40, 50}:
print(x)
# 40
# 10
# 50
# 20
# 30
<2D set>:
for x in {frozenset({10, 20, 30, 40}), frozenset({50, 60, 70, 80})}:
for y in x:
print(y)
# 40
# 10
# 20
# 30
# 80
# 50
# 60
# 70
<3D set>:
for x in {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
A set can be unpacked with an assignment and for statement, function and * but not with ** as shown below:
v1, v2, v3 = {0, 1, 2}
print(v1, v2, v3)
# 0 1 2
v1, *v2, v3 = {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
for v1, v2, v3 in {frozenset({0, 1, 2}), frozenset({3, 4, 5})}:
print(v1, v2, v3)
# 3 4 5
# 0 1 2
for v1, *v2, v3 in {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
print(*{0, 1}, 2, *{3, 4, *{5}})
# 0 1 2 3 4 5
print({*{0, 1}, 2, *{3, 4, *{5}}})
# {0, 1, 2, 3, 4, 5}
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(*{0, 1, 2, 3}, *{4, 5})
# 0 1 2 3 4 5
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(*{0, 1, 2, 3}, *{4, 5})
# 0 1 (2, 3, 4, 5)
# 0 1 2 3 4 5
# 0 1 ['A', 'B', 2, 3, 4, 5, 'C', 'D']
set() can create a set with or without an iterable as shown below:
*Memo:
- The 1st argument is
iterable(Optional-Default:()-Type:Iterable):- Don't use
iterable=.
- Don't use
# Empty set
print(set())
print(set(()))
# set()
print(set([0, 1, 2, 3, 4])) # list
print(set((0, 1, 2, 3, 4))) # tuple
print(set(iter([0, 1, 2, 3, 4]))) # iterator
print(set({0, 1, 2, 3, 4})) # set
print(set(frozenset([0, 1, 2, 3, 4]))) # frozenset
print(set(range(5))) # range
# {0, 1, 2, 3, 4}
print(set({'name': 'John', 'age': 36})) # dict
print(set({'name': 'John', 'age': 36}.keys())) # dict.keys()
# {'age', 'name'}
print(set({'name': 'John', 'age': 36}.values())) # dict.values()
# {'John', 36}
print(set({'name': 'John', 'age': 36}.items())) # dict.items()
# {('age', 36), ('name', 'John')}
print(set('Hello')) # str
# {'H', 'e', 'l', 'o'}
print(set(b'Hello')) # bytes
print(set(bytearray(b'Hello'))) # bytearray
# {72, 108, 101, 111}
A set comprehension can create a set as shown below:
<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}
<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})}
<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})})}
Be careful, a big set gets MemoryError as shown below:
A = range(1000000000)
print(set(A))
# MemoryError
A = {x for x in range(1000000000)}
# MemoryError
Top comments (0)