廖雪峰老师的python教程笔记
1、切片(Slice)
取列表或元组指定索引范围的元素的简便写法(也可用循环)
L[0:3] 表示索引从0开始,till索引3为止,但不包括3
当是0时,也可以省略不写。
同时支持倒数切片 L[-2:],不写默认到最后(取出后两个数)
L[-2:-1]不等于L[-2:] 第一个不包括-1最后一个元素
L[:10:2] 前十个数 每隔两个取一次
L[::5] 原列表L每隔5个取一个
对于不可变的元组和str也可以用切片
(0, 1, 2, 3, 4, 5)[:3] 取前三个 输出类型仍未元组
'ABCDEFG'[::2] 隔两个取
2、迭代(for..in..)
其实就是遍历list、tuple,python中也适用于无下标的字典,但因为无序,所以每次运行顺序不同;字符串也适用,只要对象是可迭代对象即可。
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。
也可同时迭代索引和元素本身
for i, value in enumerate(['A','B','C']):
print(i, value)
3、生成列表
(1) list(range(1,11))
(2) L = []
for x in range(1,11):
L.append(x * x)
(3) [x * x for x in range(1,11)]
(4)两个循环形成全排列
>>> [m + n for m in 'ABC' for n in 'XYZ']['AX','AY','AZ','BX','BY','BZ','CX','CY','CZ']
(5)for后还可加if筛选
>>> [x * x for x in range(1,11) if x %2 == 0][4,16,36,64,100]
前面x*x就是对遍历后的元素进行的操作,然后把所有元素组成列表
>>> d = {'x':'A','y':'B','z':'C'}
>>> [k +'='+ v for k, v in d.items()]
['y=B','x=A','z=C']
4、生成器generator
列表元素可以按照某种算法推算出来,不必事先全部储存在其中,浪费内存,要什么取什么。generator保存的是算法。
(1)只要把一个列表生成式的[]改成()
g = (x * x for x in range(10))
for n in g:
... print(n)
(2)如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
return 也结束生成器函数
5、迭代器
可以被next()函数调用并不断返回下一个值,直到没有数据时抛出StopIteration错误的对象称为迭代器:Iterator。
生成器都是Iterator对象,但list、dict、str虽然是Iterable可迭代对象,却不是Iterator迭代器。
Python的Iterator对象表示的是一个数据流,可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过 next(生成器函数) 函数实现按需计算下一个数据。