最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Python小技巧:解构实例示范代码

XAMPP案例 admin 18浏览 0评论

Python数据结构与算法
Python内置了许多非常有用的数据结构,比如列表(list)、集合(set)以及字典(dict)。
在使用Python的过程中,我们可以直接使用这些数据结构。
但是,通常我们还需要考虑搜索、排序、排列以及筛选等这一类常见的问题。
因此,接下来我们将讨论常见的数据结构和同数据有关的算法。
此外,在 collections 模块中也包含了针对各种数据结构的解决方案。

drr00067

将序列分解为单独的变量

实质上就是Python的解构。

我们有一个包含N个元素的元组或者序列,现在想将它分解为N个单独的变量。

任何序列(或者可迭代对象)都可以通过一个赋值操作来分解为单独的变量。
唯一的要求是变量的总数和结构要与序列相吻合。

示例1:

1p = (2, 10)
2x, y = p
3
4print(x)
5#2
6print(y)
7#10

示例2:

1data = ['Python', 2021, 7, 20, (2021,7,20)]
2name, year, month, day, date = data 
3
4print("The data is", data)
5print("The name is", name) 
6print("The year is", year)
7print("The month is", month)
8print("The day is", day)
9print("The date is", date)

结果:

1The data is ['Python', 2021, 7, 20, (2021, 7, 20)]
2The name is Python
3The year is 2021
4The month is 7
5The day is 20
6The date is (2021, 7, 20)

我们在上面的 data 中存在一个元组,因此可以将里面的元组进行解构

1name, year, month, day, (year1, month1, day1) = data 
2
3print("The year1 is", year1)
4print("The month1 is", month1)
5print("The day1 is", day1)

结果:

1The year1 is 2021
2The month1 is 7
3The day1 is 20

但是当元素数量不匹配,将得到一个错误提示

示例:

1p = (10, 20, 30)
2
3x, y = p

结果:

1---------------------------------------------------------------------------
2ValueError                                Traceback (most recent call last)
3C:\Users\ADMINI~1\AppData\Local\Temp/ipykernel_11276/1744081184.py in <module>
4      1 p = (10, 20, 30)
5----> 2 x, y = p
6
7ValueError: too many values to unpack (expected 2)

延伸

实际上不仅仅只是列表或者元组,只要对象是可迭代的,那么就可以执行分解操作。
这些包括字符串、文件、迭代器或者生成器。比如:

示例:

1s = "Python"
2a,b,c,d,e,f = s
3
4print(a)
5print(b)

结果:

1P
2y

当做分解操作时,有时候可能想丢弃某些特定的值。Python并没有提供特殊的语法来实现这一点,但通常可以选一个用不到的变量名,以此来作为要丢弃的值的名称。例如:

示例:

1data = ['Python', 2021, 7, 20, (2021,7,20)]
2_, year, month, _, _ = data
3
4print("The second is", year)
5print("The third is", month)

结果:

1The second is 2021
2The third is 7

从任意长度的可迭代对象中分解元素

需要从某个可迭代对象中分解出N个元素,但是这个可迭代对象的长度可能超过N,这会导致出现 “分解的值过多(too many values to unpack)”的异常。
Python的 “*表达式” 可以用来解决这个问题。

示例:

1record = ('R_Python','aaaaaaaaaa','111111111','2222222222','3333333333','4444444444')
2name, letter, *number = record
3
4print("The name is", name)
5print("The letter is", letter)
6print("The number is", number)

结果:

1The name is R_Python
2The letter is aaaaaaaaaa
3The number is ['111111111', '2222222222', '3333333333', '4444444444']

可以发现 *表达式 可以尽可能多的存储数据,并且一直都是以列表的形式存在。

Python中的封装和解构可以说是十分常用的小技巧。

参考于 《Python Cookbook》

转载请注明:XAMPP中文组官网 » Python小技巧:解构实例示范代码