python学习5

廖雪峰老师的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(生成器函数) 函数实现按需计算下一个数据。

你可能感兴趣的:(python学习5)