切片Slice
取列表或元组中的元素
代码语言:python代码运行次数:0复制L[0:n] #取索引0到n-1个元素
L[:n] #0可以省略
L[-2:] #支持倒数切片
#几个几个取
L[::5] #所有数,每5个取一个
#元组和字符串也可以类似取
(0, 1, 2, 3, 4, 5)[:3]
'ABCDEFG'[::2]
迭代
代码语言:python代码运行次数:0复制如何判断一个对象是可迭代对象呢?方法是通过collections.abc模块的Iterable类型判断:
from collections.abc import Iterable
isinstance(123, Iterable)
False
list或tuple的迭代
list或tuple的遍历就是迭代,借助for in循环
代码语言:python代码运行次数:0复制for i in L:
return
}
#带索引和元素的迭代
for i, value in enumerate(['A', 'B', 'C']):
... print(i, value)
...
0 A
1 B
2 C
dict的迭代
因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样
代码语言:python代码运行次数:0复制d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
... print(key) #迭代key
for value in d.values() #迭代value
for k, v in d.items() # 同时迭代key和value
字符串的迭代
代码语言:python代码运行次数:0复制for ch in 'ABC':
... print(ch)
练习
迭代查找一个list中最小和最大值,并返回一个tuple
代码语言:python代码运行次数:0复制import random
def FindMinAndMax(L):
if L == []:
return (None,None)
else:
min = L[0] #索引第一个元素很巧妙
max = L[0]
for i in L:
if i < min:
min = i
elif i > max:
max = i
return (min,max)
列表生成式
列表生成式相当于把for循环生成的列表进行简化,do的内容提前
写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来
x * x for x in range(1, 11)
for循环后面还可以加上if判断,是一个筛选条件,不能跟else
x * x for x in range(1, 11) if x % 2 == 0
生成器 generator
要创建一个generator,只要把一个列表生成式的[]改成(),但区别于打印元素:
生成器打印元素两种方法
- next()函数可以获得generator的下一个返回值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误
- 借助for循环,也不用关心StopIteration的问题
for n in g:
... print(n)
生成器函数
一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator函数
迭代器
- next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
- list、dict、str虽然是Iterable,却不是Iterator
- 把list、dict、str等Iterable变成Iterator可以使用iter()函数
- 所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算
- Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的