原文链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017323698112640
【切片】
目的:取一个list或tuple的部分元素
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
(1)取前3个元素
L[0:3],表示索引从0开始,,直到3结束,但不包括3
(2)取后两个元素L[-2:0], 记住倒数第一个元素的索引是-1
(3)间隔取数
L = list(range(100))
L[:10:2]表示前10个数,每两个取一个,从0开始
【迭代】
目的:给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。在Python中,迭代是通过for ... in
来完成的。
数组的迭代
例:
L= range(10)
For i in L:
Print (i)
字典的迭代:
dict迭代的是key。如果要迭代value,可以用for value in d.values()
,如果要同时迭代key和value,可以用for k, v in d.items()
。
多参数迭代:
for x, y in [(1, 1), (2, 4), (3, 9)]:
... print(x, y)
如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate
函数可以把一个list变成索引-元素对,这样就可以在for
循环中同时迭代索引和元素本身:
for i, value in enumerate(['A', 'B', 'C']):
... print(i, value)
如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:
from collections import Iterable
isinstance('abc', Iterable)#返回False或者True
【列表生成式】
一层嵌套:
for x in range(1, 11):
... L.append(x)
多层嵌套:
L=[x * x for x in range(1, 11) if x % 2 == 0]
【迭代器】
目的:介绍除for之外的迭代器netxt()
next()
函数不断调用并返回下一个值,直到最后抛出StopIteration
错误表示无法继续返回下一个值了。
可以被next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator
。
可以使用isinstance()
判断一个对象是否是Iterator
对象:
from collections import Iterator
isinstance((x for x in range(10)), Iterator)
生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
把list、dict、str等Iterable变成Iterator可以使用iter()函数
小结
凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iter,例:iter([])