第二章 序列构成的数组
2.1 内置序列类型概览
容器序列:list,tuple,collections.deque,这些能存放不同类型的数据,是它们所包含的任意类型的对象引用
扁平序列:str,bytes,bytearray,memoryview,array.array,只能容纳一种数据类型,里面存放的是值,是一段连续的内存空间,由此可见扁平序列更加紧凑。
可变序列:list,bytearray,array.array,collections.deque,memoryview
不可变序列:tuple,str,bytes
2.2列表推导和生成器表达式
列表推导:它的作用只有一个,就是生成列表,所以要以简洁的代码表达出来
tmp='test'
#第一种
result=[]
for s in tmp:
result.append(ord(s))
print(result)
#第二种
result=[ord(s) for s in tmp]
print(result)
生成器表达式:虽然列表推导也能用来初始化元组,数组和其他序列,但是生成器遵守迭代器协议,逐个产生元素,更节省内存
colors=['black','white']
sizes=['S','M','L']
for tshirt in ('%s %s'%(c,s) for c in colors for s in sizes):
print(tshirt)
元组:除了用作不可变的列表,还可以用于没有字段名的记录
lax_coordinates=(33.43243,-98.44432)
traveler_ids=[('USA','1312312'),('China','5435634')]
拆包:
city,year,pop,chg,area=('Beijing',2017,898,0.66,90980)
具名元组:创建一个具名元组需要两个参数,一个是类名,一个是类的各个字段名,字段名要以一串参数的形式传入到构造函数中
#定义一个City类,参数字段名有name,country,coordinates
City=namedtuple('City','name country coordinates')
china=City('china','CH',(56.8796,65.8546))
print(china.name)
print(china.country)
print(china.coordinates)
元组和列表的方法,属性
2.3切片
python中支持切片操作的有列表,元组,字符串有序序列,同时也支持对象,原对象是什么类型,那么切片完成就是什么类型,相当于重新生成一个对象。
列表切片 [start,end]
list=[1,2,3,4,5,6,7,8,9]
#切片操作(截取第一个位置到第五个位置)
new_list=list[:5]
print(new_list)
#第二个位置到倒数第二个位置
new_list=list[2:-2]
print(new_list)
对象切片 [start,end,step] step:步长
tmp='test_string'
str=tmp[5::]
print(str)