切片(截取元素,可操作list,tuple,string)
L = list(range(100)) # [0,1,2,3,...,99] L[0:10] = L[:10] # 截取前10个数 [0,1,2,...,9] L[-10:] # 截取后10个数 [90,91,92,...,99] L[10:20] # 截取10-20位置的元素 [10,11,12,13,...,19] L[:10:2] # 前10个数,每两个取一个 [0,2,4,6,8] L[::5] # 所有数,每5个取1个 [0,5,10,...,95] L[:] # 复制原数组
迭代 for...in...
- 迭代dict
d = {'a': 1, 'b': 2, 'c': 3} # 默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()
- 迭代list
for i, value in enumerate(["a", "b", "c"]): print(i, value) # 迭代list需要用到enumerate函数 # 0 a # 1 b # 2 c
列表生成式
list(range(1,11)) #生成[1,2,3,..,10] [x*x for x in range(1,11)] #生成[1*1,2*2,3*3,...,10*10] # 列表生成式跟if判断 [x*x for x in range(1,11) if x%2 ==0] #生成[2*2,4*4,6*6,8*8,10*10] # 双层循环生成全排列 [x+y for x in "ABC" for y in "XYZ"] #生成['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
生成器:genterator(一边循环一边计算,如果一个函数中包含yield关键字,则该函数就是一个generator)
- 把列表生成式的[]该为()即可
g = (x*x for x in range(1,10)) # 调用方法: next(g) #每次调用next()方法来获取元素,每次只能获取一个 for n in g: #for循环内部会不断调用next()方法 print(n)
- 使用yield关键字
def fib(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1 return 'done'
迭代器
- 可直接作用于for循环的对象 Iterable
from collections import Iterable isinstance([], Iterable) #True 使用isinstance()来判断是否是Iterable对象
- 可被next()调用并不断返回下一个值的对象 Iterator
from collections import Iterator isinstance((x for x in range(10)), Iterator) #使用isinstance()来判断是否是Iterator对象,Iterator对象是惰性求值,只有在需要时才会求值