python - 迭代(iteration)
来源:互联网 发布:外汇平台 知乎 编辑:程序博客网 时间:2024/05/21 18:35
本文内容为基于一些文章进行的个人总结。水平有限,仅供参考。
本文参考:
python: deque vs list performance comparison
Build a Basic Python Iterator
Python yield 使用浅析
Python迭代器和生成器
for in
学习python最先接触到的迭代是for in
迭代
for i in [1, 2, 'a', 'b']: print(i)
生成数组时我们还经常用到range()
函数
for i in range(1, 100): print(i)
range()
函数会返回一个创建好的数组,但是当数组元素较多时会占用内存。
这时可用xrange()
函数,xrange()
函数返回的是一个生成器(generator)实例,只有在调用时才进行计算,而不是一次性计算出来。
python3 没有
xrange
,python3中的range
即为python2中的xrange
for i in xrange(1, 100): print(i)
应用举例
所以要生成一个首项为1,公差为3的10项等差数列,利用range()
可写为:
l = [1 + 3 * i for i in range(11)]
考虑到代码的复用、性能优化,可改写为:
def generate_list(a_1, d, n): try: a_1 = float(a_1) d = float(d) n = int(n) except ValueError: return [] l = [] for i in xrange(n): l.append(a_1 + d * i) return l # 这里两种方法都可以,数组较多时上面的会快一些,大家可以测试下 # return [a_1 + d * i for i in xrange(n)]l = generate_list(1, 3, 10)
一切皆对象
在python中,具有__iter__
方法的对象均可迭代。
deque
当需要对数组操作时可以使用python内置库collections
中的deque
类,deque
是“double_end_queue”的缩写,译为“双端队列”,发音同“deck”,可从两端对数组进行操作(插入、删除)。
在算法复杂度上deque
为O(1),而list
为O(n),即对于n个相同元素的数组而言,如果deque
对象的执行次数为常数C,那么list
对象执行次数为Cn。所以deque
的性能要优于list
。
from collections import deque# list操作a = range(10000)a.append(1) # 从后面追加元素 1a.insert(0, 1) # 从前面追加元素 1a.pop() # 从后面删除元素(删除最后一个元素)a.pop(0) # 从前面删除元素(删除第一个元素)# deque操作b = deque(a)b.append(1) # 从后面追加元素 1b.appendleft(1) # 从前面追加元素 1b.pop() # 从后面删除元素(删除最后一个元素)a.popleft() # 从前面删除元素(删除第一个元素)
于是上面的例子可以改为:
def generate_list(a_1, d, n): try: a_1 = float(a_1) d = float(d) n = int(n) except ValueError: return [] l = deque() for i in xrange(n): l.append(a_1 + d * i) return l # 如果想返回list需要转一下 # return list(l)l = generate_list(1, 3, 10)
yield
用yield
可以将一个函数变为生成器,即在迭代遍历时才对进行生成计算。上面的例子可以改为:
def generate_list(a_1, d, n): try: a_1 = float(a_1) d = float(d) n = int(n) except ValueError: return [] for i in xrange(n): yield a_1 + d * il = generate_list(1, 3, 10)
可以这样理解:yield
记录函数运行的状态,遍历l
时,会返回yield
作用的值,并停止,下一次调用时会继续执行yield
后面的代码,直到再次遇到yield
。
自定义迭代对象
- python - 迭代(iteration)
- Python 迭代(iteration)
- Python基础-迭代Iteration
- 转载:Python高级特性 迭代(Iteration)
- Python学习笔记 - 迭代Iteration
- 迭代(iteration)和递归
- 迭代(Iteration)与递归(Recursion)
- 迭代 iteration
- Python教程学习简记4--Python 迭代(iteration)
- Think Python: Chapter 7 Iteration(迭代) 笔记
- Python高级特性-迭代(Iteration)-列表生成式-生成器
- 迭代周期Iteration长度控制
- Python中iteration(迭代)、iterator(迭代器)、generator(生成器)等相关概念的理解
- Python中iteration(迭代)、iterator(迭代器)、generator(生成器)等相关概念的理解
- 常见Java面试题 :迭代(iteration)和递归(recursion)
- 常见Java面试题 – 第四部分:迭代(iteration)和递归(recursion)
- 二分搜索算法(折半查找)原理以及递归(recuition),迭代(iteration)的两种实现源代码
- 二分搜索算法(折半查找)原理以及递归(recuition),迭代(iteration)的两种实现源代码
- php jquery ajax 多级联动菜单
- android开发关于隐藏文件的使用注意事项
- JPA2.0查询测试
- delphi之IOCP学习(一)
- IOS UIButton setImage 变形的问题
- python - 迭代(iteration)
- Linux系统忘了MySQL的root用户密码怎么办
- HDOJ.1800 Flying to the Mars(贪心+map)
- Fiddler中文乱码
- Unity3d相机跟随角色移动
- 大道至简——你比你想象中更早接触微服务
- 设计模式---单例模式
- Hrbust 1212 乘积最大【Dp+bignumber】恶心题....
- 异常用户发现(Spark MLlib+Spark SQL+DataFrame)