python-切片 迭代 生成器

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

python-切片 迭代 生成器的相关文章

python 切片&amp;迭代

Python提供了切片(Slice)操作符L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']取前3个元素>>> L[0:3]['Michael', 'Sarah', 'Tracy']L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3.即索引0,1,2 也可以从索引1开始,取出2个元素出来:>>> L[1:3]Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片>>> L[-2:]

Python 可迭代的对象、迭代器和生成器

迭代是数据处理的基石.扫描内存中放不下的数据集时,我们要找到一种惰性获取数据项的方式,即按需一次获取一个数据项.这就是迭代器模式(Iterator pattern). p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 25.0px Helvetica } Sentence类第1版:单词序列 我们要实现一个 Sentence 类,以此打开探索可迭代对象的旅程.我们向这个类的构造方法传入包含一些文本的字符串,然后可以逐个单词迭代.第 1 版要实现序列协议,这

python 调用函数 / 类型转换 / 切片/ 迭代

调用函数 / 类型转换 /  切片/ 迭代 1. 调用函数:abs(),max(),min() 2. 数据类型转换:int(),float(),str(),tool(),a=abs, 3. 定义函数,如果没有return语句,函数执行完毕后也会返回结果,只是结果为None 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 我们以自定义一个求绝对值的my_abs函数为例: def my_ab

Python教程·迭代、可迭代对象、迭代器与生成器详解

iteration(迭代) 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 只要是可迭代对象(Iterable),就可以通过for循环来遍历,这种遍历我们称为迭代. 也就是说所有可作用于for循环的对象都是可迭代对象(Iterable). 那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断: >>> from collections import Iterable >>> isinstance(123,I

python中的生成器

python中的生成器其实就是一个特殊的迭代器,相比于每次迭代获取数据获得(通过next()函数)时生成元素,迭代的位置,数值返回等都需要我们设计.我们可以采用更加简洁的语法即生成器(generator). 通过列表生成式,我们可以直接创建一个列表.但是,如果我们说我们可能会通过算法根据前面的999999个数推出100w个数,但是我们此时只需要使用到前几个数,那么通过列表保存100w个数来备用就会用到巨大的空间.而我们却不一定会用到第100w个数,白白浪费了庞大的空间.因此我们就需要用到了生成器

python——迭代器、生成器、装饰器

迭代器 迭代器规则 迭代:重复做一些事很多次,就像在循环中那样. 不仅可以对字典和序列进行迭代,还可以对其他对象进行迭代:只要该对象实现了__iter__方法. __iter__方法会返回一个迭代器(iterator),所谓的迭代器就是具有next方法(这个方法在调用时不需要任何参数)的对象.在调用next方法时,迭代器会返回他的下一个值.如果next方法被调用,但迭代器没有值可以返回,就会引发一个StopIteration异常. 注意:迭代器规则在3.0中有一些变化.在新的规则中,迭代器对象应

python迭代器、生成器和yield语句

http://blog.csdn.net/pipisorry/article/details/22107553 一.迭代器(iterator) 迭代器:是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration.任何这类的对象在Python中都可以用for循环或其他遍历工具迭代,迭代工具内部会在每次迭代时调用next方法,并且捕捉StopIteration异常来确定何时离开. 迭代器对象要求支持迭代

python高级之生成器&amp;迭代器

python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container):多个元素组织在一起的数据结构 可迭代对象(iterable):对象中含有__iter__()方法 迭代器(iterator):对象含有__next__()方法,并且迭代器也有__iter__()方法 生成器(generator):生成器其实是一种特殊的迭代器,不过这种迭代器更加优雅 列表/集合/字典推导式(list,set,dict compreh

Python迭代器和生成器介绍

Python迭代器和生成器介绍 迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration. 在for循环中,Python将自动调用工厂函数iter()获得迭代器,自动调用next()获取元素,还完成了检查StopIteration异常的工作. 常用的几个内建数据结构tuple.list.set.dict都支持迭代器,字符串也可以使用迭代操作. 你也可以自己实现一个迭代器,如上所述,只

(转)python基础学习-----生成器和迭代器

在Python中,很多对象都是可以通过for语句来直接遍历的,例如list.string.dict等等,这些对象都可以被称为可迭代对象.至于说哪些对象是可以被迭代访问的,就要了解一下迭代器相关的知识了. 迭代器 迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和next()方法.其中__iter__()方法返回迭代器对象本身:next()方法返回容器的下一个元素,在结尾时引发StopIteration异常. __iter__()和next()