切片(slice)
切片提供了一种对list列表,tuple元组,str字符串,新的获取方式,以往使用下标或者索引的操作可以被代替。
语法:对象[a:b:c] 代表从a开始检索(当从0开始检索时可省略),到b结束,但不包括b,c代表步长。
迭代(Iteration)
如果给定一个list或tuple,我们可以通过for
循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
在python中用for...in...来迭代
list和tuple迭代
L=[1,2,3,4,5]
for l in L:
print(l)‘
dict迭代
key迭代
L={'a':1,'b':2,'c':3}
for key in L:
print(key)
value迭代
L={'a':1,'b':2,'c':3}
for value in L.values():
print(value )
也可key value同时迭代,使用到items()函数。
for k, v in L.items()
生成器
在Python中,一边循环一边计算的机制,称为生成器:generator。
列表的容量有限,会受到内存的限制,生成器解决了这一问题,生成器中保留着得到列表所有元素的算法,当需要时可以用next()函数一一生成元素,也可通过for循环一次性得到查看所有生成元素。
简而言之,生成器中保留的是算法,而非元素,使用时生成器可使用next()函数来调用生成器内部的算法计算出各个元素。
迭代器 Iterator
迭代器是一种状态对象,不使用时处于休眠状态,当调用next()函数时,迭代器会退出休眠状态,去取下一个值。迭代器就像一个懒加载的工厂,等到有人需要的时候才给它生成值返回,没调用的时候就处于休眠状态等待下一次调用。
我们已经知道,可以直接作用于for
循环的数据类型有以下几种:
一类是集合数据类型,如list
、tuple
、dict
、set
、str
等;
一类是generator
,包括生成器和带yield
的generator function。
这些可以直接作用于for
循环的对象统称为可迭代对象:Iterable
。
但集合数据类型,如list
、tuple
、dict
、set
、str
等并不是迭代器,根据迭代器的含义可以认为迭代器对象都是一个未知的数据流,数据流的大小长度未知,只有通过next()函数才能知道下一个元素或者下一个元素是否存在,而集合数据类型是已知的对象,其长度和大小已知。集合数据类型可以通过函数iter()来转换为迭代器对象。