1 切片操作
>>> L [‘aaa‘, ‘bbb‘, ‘ccc‘, ‘ddd‘] >>> L[0:3] [‘aaa‘, ‘bbb‘, ‘ccc‘] >>> L[::5] [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95] 0-100的所有数字,每5个取一个
2 迭代操作 只要有可迭代对象就可以迭代
1 >>> d = {‘a‘:1, ‘b‘:2, ‘c‘:3} 2 >>> for key in d: 3 ... print key 4 ... 5 a 6 c 7 b
对字典进行迭代 默认迭代键 如果要迭代值,可以选用下面代码
1 >>> d 2 {‘a‘: 1, ‘c‘: 3, ‘b‘: 2} 3 >>> for values in d.itervalues(): 4 ... print values 5 ... 6 1 7 3 8 2
d.itervalues()返回一个字典值的可迭代对象
同时迭代键和值:
1 >>> for k, v in d.iteritems(): 2 ... print k, v 3 ... 4 a 1 5 c 3 6 b 2
2.1 判断可迭代对象
1 >>> from collections import Iterable 2 >>> isinstance(d.iteritems(), Iterable) 3 True
2.3 enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身
1 >>> for i, v in enumerate([‘a‘, ‘b‘, ‘c‘]): 2 ... print i, v 3 ... 4 0 a 5 1 b 6 2 c
2.4 列表生成式
1 >>> [x*x for x in range(1, 11)] 2 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 3 需要生成的x*x元素放在前面
3 生成器
生成列表的过程中是根据计算公式,边计算边生成,而不是一次生成
3.1 只要把一个列表生成式的[]改成(),就创建了一个generator
1 >>> L = [x*x for x in range(10)] 2 >>> L 3 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 4 列表生成式和生成器对比 5 >>> g = (x*x for x in range(10)) 6 >>> g 7 <generator object <genexpr> at 0x7f87935774b0>
通过生成器的next()方法可以很方便的生成后续元素,全部打印需要使用for循环变量
1 >>> g.next() 2 0 3 >>> g.next() 4 1 5 >>> g.next() 6 4 7 >>> g.next() 8 9 9 >>> for n in g: 10 ... print n 11 ... 12 16 13 25 14 36 15 49 16 64 17 81
3.2 通过yield也可以使用生成器函数
如下通过yield生成一个生成器函数
1 >>> def fib(max): 2 ... n, a, b = 0, 0, 1 3 ... while(n < max): 4 ... yield b 5 ... a, b = a, a + b 6 ... n = n + 1 7 ... 8 >>> fib(6) 9 <generator object fib at 0x7f8793577aa0>
生成器函数和普通函数执行不同,生成器函数每往生成一次,就会从上一次yield处执行
代码实例如下:
1 >>> def odd(): 2 ... print ‘step 1‘ 3 ... yield 1 4 ... print ‘step 2‘ 5 ... yield 2 6 ... print ‘step 3‘ 7 ... yield 3 8 ... 9 >>> o = odd() 10 >>> o.next() 11 step 1 12 1 13 >>> o.next() 14 step 2 15 2 16 >>> o.next() 17 step 3 18 3
时间: 2024-10-08 09:42:29