python 怎么算l2范数_python之彻底搞懂迭代、可迭代、迭代器的区别(一)
一、基本概念
迭代(Iteration)是动词,是指通过遍历获取某容器内所有元素,特指遍历获取这个动作。
可迭代 (iterable)是形容词,是指某容器可被遍历获取内部所有元素,特指容器内元素可被遍历获取的特性。
在python中包含__iter__方法的对象就是可迭代的。
- 可迭代对象一般指某容器可被循环遍历获取内部所有元素,该容器有__iter__方法和__getitem__,无__next__方法。
- 可迭代对象常见的有str、list、tuple、set、dict等。
迭代器 (iterator)是名词,特指某种特殊的容器,该容器内所有元素可通过__next__方法依次获取。
在python中包含__iter__方法和__next__方法的对象就是迭代器。
- 迭代器一般指某容器可通过__next__方法依次获取内部所有元素,该容器有__iter__方法和__next__,无__getitem__方法。
- 迭代器常见的有文件句柄以及通过iter()转换的对象和迭代器生成式生成的对象等。
- 生成器,是一种特殊的迭代器,生成器自动生成了__iter__方法和__next__,不需要再手动生成。
可迭代、可迭代对象、迭代器关系图
二、区分可迭代对象与迭代器的方法
- 判断一个对象是可迭代对象,可以通过查看该对象是不是有__iter__方法和__getitem__方法来鉴别。
# 字符串:可迭代对象s1 = '努力学python,坚持认真学python'print('*' * 10, '判断字符串iter、getitem、next', '*' * 10)print('iter:', '__iter__' in dir(s1))print('getitem:', '__getitem__' in dir(s1))print('next:', '__next__' in dir(s1))# 列表:可迭代对象l1 = [i for i in range(10)]print('*' * 10, '判断列表iter、getitem、next', '*' * 10)print('iter:', '__iter__' in dir(l1))print('getitem:', '__getitem__' in dir(l1))print('next:', '__next__' in dir(l1))out:********** 判断字符串iter、getitem、next **********iter: Truegetitem: Truenext: False********** 判断列表iter、getitem、next **********iter: Truegetitem: Truenext: False
- 判断一个对象是不是迭代器,可以通过查看该对象是不是有__iter__方法和__next__方法来鉴别。
# 字符串迭代器s2 = iter(s1)print('*' * 10, '判断字符串迭代器iter、getitem、next', '*' * 10)print('iter:', '__iter__' in dir(s2))print('getitem:', '__getitem__' in dir(s2))print('next:', '__next__' in dir(s2))# 列表迭代器l2 = iter(l1)print('*' * 10, '判断列表迭代器iter、getitem、next', '*' * 10)print('iter:', '__iter__' in dir(l2))print('getitem:', '__getitem__' in dir(l2))print('next:', '__next__' in dir(l2))out:********** 判断字符串迭代器iter、getitem、next **********iter: Truegetitem: Falsenext: True********** 判断列表迭代器iter、getitem、next **********iter: Truegetitem: Falsenext: True
- 可以自定义一个简单的lambda表达式来判断是可迭代对象还是迭代器。
is_er = lambda x: '__iter__' in dir(x) and '__getitem__' in dir(x)is_or = lambda x: '__iter__' in dir(x) and '__next__' in dir(x)s1 = '努力学python,坚持认真学python's2 = iter(s1)print('s1是可迭代对象吗?', is_er(s1))print('s1是迭代器吗?', is_or(s1))print('s2是可迭代对象吗?', is_er(s2))print('s2是迭代器吗?', is_or(s2))out:s1是可迭代对象吗? Trues1是迭代器吗? Falses2是可迭代对象吗? Falses2是迭代器吗? True
三、可迭代对象与迭代器的优劣比较
可迭代对象的优点:
- 访问速度快。
- 访问方式灵活,可多次、重复、任意选择范围访问。
- 内置方法和函数比较多。
可迭代对象的缺点:
- 耗费内存。
- 取值过于灵活(有时会引起报错,如index out of range、TypeError等)。
迭代器的优点:
- 节省内存。
- 惰性取值(一次固定取一条数据,直到取值完毕报StopIteration,不会引发报错)。
迭代器的缺点:
- 访问速度慢。
- 访问方式死板,只能访问下一条不能访问上一条。
- 内置方法和函数比较少。
比较可迭代对象与迭代器的优缺点。
四、可迭代对象与迭代器如何选择
- 在存储数据相对少(8g内存可承受几百万个对象),侧重对数据灵活处理时,将数据集设为可迭代对象更好。
- 当数据量大到足以撑爆内存(几千万甚至上亿个对象时),侧重节省内存时,将数据集设为迭代器更好。
可迭代对象、迭代器两种方式怎么选?
python 怎么算l2范数_python之彻底搞懂迭代、可迭代、迭代器的区别(一)相关推荐
- python 怎么算l2范数_向量范数与矩阵范数(L0, L1, L2)
直观理解 在实数域中,数的大小和两个数之间的距离是通过绝对值来度量的.在解析几何中,向量的大小和两个向量之差的大小是"长度"和"距离"的概念来度量的.为了对矩阵 ...
- python 怎么算l2范数_数学推导+纯Python实现机器学习算法13:Lasso回归
版权说明:本公号转载文章旨在学习交流,不用于任何商业用途,版权归原作者所有,如有异议,敬请后台联络我们,议定合作或删除,我们将第一时间按版权法规定妥善处理,非常感谢! Python机器学习算法实现 A ...
- python 怎么算l2范数,回归模型中成本函数的L1范数而不是L2范数
I was wondering if there's a function in Python that would do the same job as scipy.linalg.lstsq but ...
- python怎么算一元二次方程_python如何解一元二次方程
本文收集整理关于python如何解一元二次方程的相关议题,使用内容导航快速到达. 内容导航: Q1:python 使用try except解一元二次方程问题 123456789101112131415 ...
- python怎么算二元一次方程_python如何拟合二元一次方程?
import numpy as np from scipy import optimize# 最小二乘法拟合 import matplotlib.pyplot as plt # python matp ...
- python怎么算一元二次方程_Python求一元二次方程解
题目: 请定义一个函数 'quadratic(a,b,c)',接收三个参数,返回一元二次方程: ax² + bx + c = 0 的两个解.(提示:计算平方根可以调用math.sqrt()函数) im ...
- python中x y表示_Python中表达式x += y和x = x+y 的区别详解
前言 本文主要给大家介绍的是关于Python中表达式x += y和x = x+y 区别的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 直接看下面代码: x +=y In [66]: id( ...
- python字典items返回什么_Python 字典items返回列表,iteritems返回迭代器
说明:items以列表方式返回字典中的键值对,iteritems以迭代器对象 返回键值对儿(Python3中不再支持): 字典items()方法和iteritems()方法,是python字典的内建函 ...
- python飞机大战联网版_Python 飞机大战搞怪版本
python 飞机大战搞怪版本 (飞机为迷你亚索,外星人为迷你小诺手,由于时间关系和图片素材较难寻找,仅仅做了简易版,没有贴上背景图片.由于篇幅原因,对于函数讲解较为简略,可以自行搜索相应函数的用法) ...
最新文章
- ant table表格整行点击事件并获取当前行的数据
- Java面试通关要点汇总集之核心篇参考答案
- 移动端重构系列1——前期准备工作
- c语言命令行选项处理函数getopt和getopt_long() 函数使用
- C++结构与联合有和区别?
- java 枚举类型 构造函数及用法
- java servlet是接口_JavaWeb:Servlet 接口
- 使用MyQ打开车库门时如何接收警报
- composer 更改为中国镜像
- 将Python和R整合进一个数据分析流程
- 推荐几个好的粉碎文件的软件?这3款软件让你彻底摆脱无法删除文件的烦恼
- WordPress网站配置腾讯云cdn缓存
- 提示“The selection cannot be launched, and there are no recent launches.”
- android文件管理器u盘,Android U盘文件显示在文件管理器
- Spring Boot之定时任务
- Adobe Flash cs5正式版发布
- C++编程之模板与泛型
- ENGLISH资料收集(18)-蔬菜名
- java 项目测试_项目测试工作流程
- 基于Airtest陀螺世界辅助源代码