主要是对自己学习做一个笔记整理,小白可直接绕道 廖雪峰的官方网站,进行学习。
l = [1,2,3,4,5] l = “hello word” 字符串也能使用切片 l[start : end : interval] 返回数组中索引 = [start,end-1] 取不到end,
interval为每间隔interval个取
l[1:5] => [2,3,4,5] ; l[-2:-1] => [4] ;l[0:0] => [] l[:3] => [1,2,3] ; l[-2:] => [4,5] ; l[:] => [1,2,3,4,5] 两端可省略 l[::2] => [1,3,5] 间隔2取一次
迭代 for…in…迭代类型 str,list,set,tuple,dict…
默认情况下,dict迭代的是key。 如果要迭代value,可以用for value in d.values(), 如果要同时迭代key和value,可以用for k, v in d.items()。
检查是否可迭代,通过collections模块的Iterable类型判断
from collections import Iterable isinstance(obj, Iterable) # obj是否可迭代多个变量,利用enumerate(list) 实现list用索引下标迭代
for x, y in [(1, 1), (2, 4), (3, 9)]: print(x, y) for i, v in enumerate([1,2,3,4]): print(i,v) 列表生成式[结果 判断式 迭代式 过滤] 结果与迭代不可省略
[x if x > 6 else -x for x in range(1,11) if x%2 == 0] ---> [-2, -4, -6, 8, 10] 生成器 generator[结果 判断式 迭代式 过滤] 结果与迭代不可省略
g = (x if x > 6 else -x for x in range(1,11) if x%2 == 0) 与列表生成式括号不同 #直接用next调用 next(g) --> -2 next(g) --> -4 ... next(g) --> StopIteration 当无值时抛出异常 #使用循环 for n in g: print(n) # 带yield的生成器方法 generator function def odd(): print('step 1') yield 1 print('step 2') yield(3) print('step 3') yield(5) >>> o = odd() 有yield函数会变为generator >>> next(o) 每次执行next,会返回yield出现的地方 step 1 1 >>> next(o) step 2 3 >>> next(o) step 3 5 >>> next(o) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration 迭代器 Iterator集合数据类型,如list、tuple、dict、set、str等 是 Iterable generator,包括生成器和带yield的generator function。 是Iterator 直接作用于for循环的对象统称为可迭代对象:Iterable,可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator 它们表示一个惰性计算的序列;(需要被计算时才被调用)。 使用isinstance()判断是否是Iterable、Iterator对象,iter()将可迭代对象Iterable变为迭代器对象Iterator
from collections.abc import Iterator isinstance((x for x in range(10)), Iterator) --> true isinstance([], Iterator) --> false isinstance((), Iterator) --> false isinstance("abc", Iterator) --> false isinstance(iter("abc"), Iterator) --> true #for循环等价于 it = iter([1, 2, 3, 4, 5]) while True: try: # 获得下一个值: x = next(it) except StopIteration: # 遇到StopIteration就退出循环 break