*Memo:
- My post explains the unpacking with an assignment statement (1).
-
My post explains the unpacking with a
for
statement (1). -
My post explains the unpacking with a
for
statement (2). -
My post explains the iterable unpacking with
*
and a function (1). -
My post explains the iterable unpacking with
*
and a function (2). -
My post explains the dictionary unpacking with
**
within a dictionary and function.
Iterable and dictionary unpacking can be done with *
and **
respectively and with an assignment statement as shown below:
v1, *v2, v3 = [0, 1, 2, 3, 4, 5] # list
# list(list(list))
v1, *v2, v3 = [*[0, 1], 2, *[3, 4, *[5]]]
v1, *v2, v3 = (0, 1, 2, 3, 4, 5) # tuple
# tuple(tuple(tuple))
v1, *v2, v3 = (*(0, 1), 2, *(3, 4, *(5,)))
v1, *v2, v3 = {0, 1, 2, 3, 4, 5} # set
# set(set(set))
v1, *v2, v3 = {*{0, 1}, 2, *{3, 4, *{5,}}}
v1, *v2, v3 = frozenset({0, 1, 2, 3, 4, 5}) # frozenset
v1, *v2, v3 = iter([0, 1, 2, 3, 4, 5]) # iterator
v1, *v2, v3 = range(6) # range
print(v1, v2, v3) # 0 [1, 2, 3, 4] 5
print(v1, *v2, v3) # 0 1 2 3 4 5
v1, *v2, v3 = {0:1, 2:3, 4:5, 6:7, 8:9, 10:11} # dict
# dict(dict(dict))
v1, *v2, v3 = {**{0:1, 2:3}, 4:5, **{6:7, 8:9, **{10:11}}}
v1, *v2, v3 = {0:1, 2:3, 4:5, 6:7, 8:9, 10:11}.keys() # dict.keys()
print(v1, v2, v3) # 0 [2, 4, 6, 8] 10
print(v1, *v2, v3) # 0 2 4 6 8 10
v1, *v2, v3 = {0:1, 2:3, 4:5, 6:7, 8:9, 10:11}.values() # dict.values()
print(v1, v2, v3) # 1 [3, 5, 7, 9] 11
print(v1, *v2, v3) # 1 3 5 7 9 11
v1, *v2, v3 = {0:1, 2:3, 4:5, 6:7, 8:9, 10:11}.items() # dict.items()
print(v1, v2, v3) # (0, 1) [(2, 3), (4, 5), (6, 7), (8, 9)] (10, 11)
print(v1, *v2, v3) # (0, 1) (2, 3) (4, 5) (6, 7) (8, 9) (10, 11)
v1, *v2, v3 = '012345' # str
print(v1, v2, v3) # 0 ['1', '2', '3', '4'] 5
print(v1, *v2, v3) # 0 1 2 3 4 5
v1, *v2, v3 = b'012345' # bytes
v1, *v2, v3 = bytearray(b'012345') # bytearray
print(v1, v2, v3) # 48 [49, 50, 51, 52] 53
print(v1, *v2, v3) # 48 49 50 51 52 53
*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
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
v1, *v2, v3 = [0, 1]
print(v1, v2, v3) # 0 [] 1
print(v1, *v2, v3) # 0 Nothing 1
*v1, v2, v3 = [0, 1]
print(v1, v2, v3) # [] 0 1
print(*v1, v2, v3) # Nothing 0 1
v1, v2, *v3 = [0, 1]
print(v1, v2, v3) # 0 1 []
print(v1, v2, *v3) # 0 1 Nothing
v1, *v2, v3 = [0, 1, 2, 3, 4, 5]
(v1, *v2, v3) = [0, 1, 2, 3, 4, 5]
[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
v1, *v2, v3 = [[0, 1], 2, [3, 4, [5]]]
(v1, *v2, v3) = [[0, 1], 2, [3, 4, [5]]]
[v1, *v2, v3] = [[0, 1], 2, [3, 4, [5]]]
print(v1, v2, v3) # [0, 1] [2] [3, 4, [5]]
w1, w2, w3 = v3
print(*v1, *v2, w1, w2, *w3) # 0 1 2 3 4 5
(*v1, v2), *v3, (v4, *v5, (*v6,)) = [[0, 1], 2, [3, 4, [5]]]
((*v1, v2), *v3, (v4, *v5, (*v6,))) = [[0, 1], 2, [3, 4, [5]]]
[[*v1, v2], *v3, [v4, *v5, [*v6]]] = [[0, 1], 2, [3, 4, [5]]]
print(v1, v2, v3, v4, v5, v6) # [0] 1 [2] 3 [4] [5]
print(*v1, v2, *v3, v4, *v5, *v6) # 0 1 2 3 4
(v1, v2), *(v2,), (v3, *(v4,), (*(v5,),)) = [[0, 1], 2, [3, 4, [5]]]
((v1, v2), *(v3,), (v4, *(v5,), (*(v6,),))) = [[0, 1], 2, [3, 4, [5]]]
[v1, v2], *[v3], [v4, *[v5], [*[v6]]] = [[0, 1], 2, [3, 4, [5]]]
print(v1, v2, v3, v4, v5)
# 0 1 2 3 4
*v, = [0]
(*v,) = [0]
[*v] = [0]
print(v) # [0]
print(*v) # 0
*(v,), = [0]
(*(v,),) = [0]
[*[v]] = [0]
print(v)
# 0
v1, *v2, v3 = [0]
*v1, v2, v3 = [0]
v1, v2, *v3 = [0]
# ValueError: not enough values to unpack (expected at least 2, got 1)
*v1, *v2, v3 = [0, 1, 2, 3, 4, 5]
# SyntaxError: multiple starred expressions in assignment
*v = [0, 1, 2, 3, 4, 5]
# SyntaxError: starred assignment target must be in a list or tuple
v1, v2, v3 = *[0, 1, 2, 3, 4, 5] # list
v1, v2, v3 = *(0, 1, 2, 3, 4, 5) # tuple
v1, v2, v3 = *{0, 1, 2, 3, 4, 5} # set
v1, v2, v3 = *frozenset({0, 1, 2, 3, 4, 5}) # frozenset
v1, v2, v3 = *{0:1, 2:3, 4:5, 6:7, 8:9, 10:11} # dict
v1, v2, v3 = *iter([0, 1, 2, 3, 4, 5]) # iterator
v1, v2, v3 = *'012345' # str
v1, v2, v3 = *b'012345' # bytes
v1, v2, v3 = *bytearray(b'012345') # bytearray
v1, v2, v3 = *range(6) # range
# SyntaxError: can't use starred expression here
v1, v2, v3 = **{0:1, 2:3, 4:5, 6:7, 8:9, 10:11} # dict
# SyntaxError: invalid syntax
Top comments (0)