1 L=[0,1,2,3,4,5,6,7,8,9,10] 2 L[:3]=[0,1,2] 3 L[-2:]=[9,10] 4 L[1:3]=[1,2] 5 L[::3]=[0,3,6,9] 6 L[:5:2]=[0,2,4] 7 >>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 8 >>> alist[-1: -5: -1] 9 [9, 8, 7, 6] 10 >>> alist[9: 5: -1] 11 [9, 8, 7, 6] 12 >>> alist[-1::-1] 13 [9, 8, 7, 6, 5, 4, 3, 2,1,0] 14 >>> alist[6:-8:-1] 15 [6, 5, 4, 3]
例如:生成一个1,2,3 …… 的平方的List,用列表生成式就很方便python
[x*x for x in range(1:n)]函数
还能够添加条件筛选spa
[x*x for x in range(1:n) if x%2 ==]code
能够生成全队列对象
[x+y for x in ‘AB’ for y in ‘CD’]blog
[‘AC’,’AD’,’BC’,’BD’]队列
dict用于行列生成式内存
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' } >>> [k + '=' + v for k, v in d.items()] ['y=B', 'x=A', 'z=C']
因为当列表生成式生成大量数据时会占用大量的内存,因此若是列表的元素能够经过一边循环一边计算出来,能够节省大量的空间,这种一边循环一边计算的方式成为生成器:generatorgenerator
g = (x*x for x in [1,2,3,4,5,6,7,8,9]) #定义一个生成器it
next(g) 1
next(g) 4
…..
由于生成器也是可迭代对象,因此能够用for n in g print(n)读取生成器数据
例子:斐波拉契数列,除第一个和第二个数外,任意一个数均可由前两个数相加获得 1,1,2,3,5,8,13,21,34…
def fei(n) a,b = 0,1 while n: yield b a,b = b,a+b n = n-1 return ‘done’
其中yield是关键字,能够把定义的函数变成一个generator,这里最难理解的就是generator和函数的执行流程不同。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
f = fei(6)
next (f) 1
next(f) 1
或者for x in fib(6)
print(x)
可是用for循环调用generator时,发现拿不到generator的return语句的返回值。若是想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中:
>>> g = fib(6) >>> while True: ... try: ... x = next(g) ... print('g:', x) ... except StopIteration as e: ... print('Generator return value:', e.value) ... break ...
g: 1
g: 1
g: 2
g: 3
g: 5
g: 8
Generator return value: done
例子
def yang () L = [1] while True yield L L = [1] + [L[i]+L[i+1] for i in range(len(L)-1)] + [1]