数据结构和算法-1.解压序列然后赋值给多个变量

问题描述

有一个元组序列包含了 N 个元素,如:a_list = [4, 5, 6]

如何将它里面的值解压后同时赋值给 N 个变量呢?

解决方案

任何一个序列(或者可迭代的对象)都可以通过一个简单的赋值语句解压并赋值给多个变量。

不过,需要注意的一个前提就是:变量的个数必须跟序列元素的个数相同。

实例演示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

# 校验把一个「元组」解压并赋值给多个变量
def test_unzip_assign_a_tuple():
a_tuple = (1, 2, 3) # 元组

# 把元组解压并赋值给3个变量
t1, t2, t3 = a_tuple

assert t1 == 1
assert t2 == 2
assert t3 == 3


# 校验把一个「列表」解压并赋值给多个变量
def test_unzip_assign_a_list():
# 列表
a_list = [4, 5, 6]

# 把列表解压并赋值给3个变量
l1, l2, l3 = a_list

assert l1 == 4
assert l2 == 5
assert l3 == 6


# 校验把一个「字符串」解压并赋值给多个变量
def test_unzip_assign_a_str():
# 字符串
a_str = "fan"

# 把字符串解压并赋值给3个变量
s1, s2, s3 = a_str

assert s1 == "f"
assert s2 == "a"
assert s3 == "n"


# 校验把一个「混合列表」解压并赋值给多个变量
def test_unzip_assign_a_mix_list():
# 混合的列表
mix_list = [4, 5, 'bi', (2018, 1, 21)]

# 把混合的列表解压并赋值给4个变量
m1, m2, m3, m4 = mix_list

assert m1 == 4
assert m2 == 5
assert m3 == 'bi'
assert m4 == (2018, 1, 21)

# 把混合的列表解压并赋值给6个变量
m1, m2, m3, (m4, m5, m6) = mix_list

assert m1 == 4
assert m2 == 5
assert m3 == 'bi'
assert m4 == 2018
assert m5 == 1
assert m6 == 21

# 校验把生成器解压并赋值给多个变量
def test_unzip_assign_generator():
a_generator = (x * 2 for x in range(3))
g1, g2, g3 = a_generator

assert g1 == 0
assert g2 == 2
assert g3 == 4

如果我们只想获取一个列表中的一部分值,其他的值并不关心,怎么办呢?

1
2
3
4
5
6
# 校验只解压一部分值并赋值给变量
def test_unzip_part():
# 把不关心的变量使用一些变量占位,这样就可以只获取关心的变量了
_, name, _, gender = [1, "bixiaofan", 2, "帅哥"]
assert name == "bixiaofan"
assert gender == "帅哥"

注意:必须要保证用于占位的变量在其他地方没有被使用。

小贴示:

这种解压赋值可以用在任何可迭代的对象上,不仅限于列表、元组和字符串,文件对象、迭代器和生成器也是可以的。

毕小烦 wechat
「请扫一扫上面的二维码,关注老毕的微信公众号」
「您的赞赏是老毕持续创作的动力」