Python 基础与笔记(2)
来源:互联网 发布:telnet远程端口 编辑:程序博客网 时间:2024/06/05 10:35
1、list与tuple的切片操作:
list[:5]或list[0:5]表示第0,1,2,3,4个索引值;
负,list[-2:0]等于list[-2:]即倒数第2、倒数第1个数;
跳:list[1:10:2],表示步长为2的。
2、迭代操作:
对于list、tuple还有字符串都可以用 for…in 进行迭代,而对于dictionary的话,也可以哦,只不过默认情况下,dict迭代的是key。
迭代value,用 for value in d.itervalues()
同时迭代key和value,用 for k, v in d.iteritems()
3、列表生成式:很方便
生成1-10的list:
>>> range(1,11)[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
生成 12、22、……102的list:
>>> list = [x*x for x in range(1,11)]>>> list[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
还可以再选择一下:
>>> [x * x for x in range(1, 11)if x % 2 == 0][4, 16, 36, 64, 100]
还可以两层循环的:
>>> [m + n for m in 'ABC' for n in 'XYZ']['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
4、生成器:
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。
创建方法1:第一种方法很简单,只要把一个列表生成式的
[]
改成()
,就创建了一个generator:>>> L = [x * x for x in range(10)]>>> L[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]>>> g = (x * x for x in range(10))>>> g<generator object <genexpr> at 0x104feab40>可以通过generator的.next()方法打印出来数据,另外也可以通过迭代哦,基本上我们都选择for…in迭代方法。
创建方法2:通过特殊函数创建:如果一个函数定义中包含
yield
关键字,那么这个函数就不再是一个普通函数,而是一个generator。#这是函数,输出斐波那契数列def fib(max): n, a, b = 0, 0, 1 while n < max: print b a, b = b, a + b n = n + 1#这是generator,也是生成斐波那契数列;def fib(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1
注意:这里,最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用
next()
的时候执行,遇到yield
语句返回,再次执行时从上次返回的yield
语句处继续执行。>>> def odd():... print 'step 1'... yield 1... print 'step 2'... yield 3... print 'step 3'... yield 5...>>> o = odd()>>> o.next()step 11>>> o.next()step 23>>> o.next()step 35>>> o.next()Traceback (most recent call last): File "<stdin>", line 1, in <module>StopIteration