第一章Python数据结构和算法(一)
Python 提供了大量的内置数据结构,包括列表,集合以及字典。大多数情况下使用这些数据结构是很简单的。但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题。因此,这一章的目的就是讨论这些比较常见的问题和算法。另外,我们也会给出在集合模块 collections 当中操作这些数据结构的方法。
1.1将序列分解为单独的变量
问题
现有一个包含N个元素的元祖或者序列,怎样将它里面的值解压后同时赋给N个变量?
解决方案
任何的序列(或者是可迭代对象)可以通过一个简单的赋值操作来分解为单独的变量。唯一的要求就是变量的总数和结构必须与序列相吻合。
代码示例:
p = (4, 2) x, y = p print(x) # 4 data = ['Jack', 30, 2.14, (2020, 12, 8)] name, age, height, date = data print(name) # 'Jack' print(date) # (2020, 12, 8) name, age, height, (year, mon, day) = data print(age) # 30 print(year) # 2020
如果元素的数量不匹配,会得到一个错误提示。
代码示例:
p=(4,5) x,y,z=p # Traceback (most recent call last): # File "E:/day01_1.py", line 2, in <module> # x,y,z=p # ValueError: not enough values to unpack (expected 3, got 2)
讨论
不仅仅只是元组或列表,只要对象是可迭代的,就可以执行分解操作。包括字符串,文件对象,迭代器和生成器。
代码示例:
s='Hello' a,b,c,d,e=s print(a) #'H' print(d) #'l'
有时候,你可能只想解压一部分,丢弃其他的值。对于这种情况 Python 并没有提供特殊的语法。但是你可以使用任意变量名去占位,到时候丢掉这些变量就行了。
代码示例:
data=['Jack',30,2.14,(2020,12,8)] _,age,height,_=data print(age) #30 print(_) #(2020, 12, 8)
你必须保证你选用的那些占位变量名在其他地方没被使用到。