Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python的迭代器和生成器

python的迭代器和生成器

作者头像
哒呵呵
发布于 2018-08-06 06:59:43
发布于 2018-08-06 06:59:43
4090
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记

迭代是数据处理的基础,迭代可以理解为是一种惰性求值。在python里迭代器和生成器是一回事,使用的是yield关键字。

在语言内部,迭代器有下面的使用用途:

--for循环

--构建和扩展集合

--逐行遍历文本文件

--字典推导,列表推导,集合推导

--元组拆包

--调用函数时,使用*拆包

首先来看看iter函数:

我们来看看一个简单分词的类:

class Sentence():

def __init__(self, text):

self.word = text.split(' ')

def __getitem__(self, index):

return self.word[index]

s = Sentence('i\'m the king')

s

Out[3]: <__main__.Sentence at 0x1c8dba68588>

#在这里你可以重载__repr__使其返回你想要的字符串

for i in s:

print(i)

i'm

the

king

list(s)

Out[5]: ["i'm", 'the', 'king']

实际上是,这个调用了iter()函数,这个函数的作用呢?

--检查对象是否实现了__iter__方法,实现了就调用它,获取一个迭代器

--没有实现的话,但实现了__getitem__方法,python会创建一个迭代器,尝试按顺序获取元素

--都没有的话,会抛出"TypeError",如下:

TypeError: 'Sentence' object is not iterable

可迭代对象和迭代器:

container.__iter__()

Return an iterator object. The object is required to support the iterator protocol described below. If a container supports different types of iteration,

additional methods can be provided to specifically request iterators for those iteration types.

从这个。可以看出python是从可迭代器对象中获取迭代器

从types的源码中,也有这么一段注释:

# Iterators in Python aren't a matter of type but of protocol. A large

# and changing number of builtin types implement *some* flavor of

# iterator. Don't check the type! Use hasattr to check for both

# "__iter__" and "__next__" attributes instead.

这个告诉我们最好使用isinstance(x, abc.Iterator)来检查是不是迭代器

迭代器对象:

This is implemented using two distinct methods(也就是__iter__,__next__); these are used to allow user-defined classes to support iteration. Sequences always support the iteration methods.

Once an iterator’s __next__() method raises StopIteration, it must continue to do so on subsequent calls. Implementations that do not obey this property are deemed broken.

要注意可迭代对象和迭代器的区别,可迭代对象有__iter__方法,每次都会实例化一个新的迭代器。迭代器要实现__next__方法,返回单个元素,__iter__返回迭代器本身。

生成器:

我们做一个简单的修改:

class Sentence():

def __init__(self, text):

self.word = text.split(' ')

def __iter__(self, index):

for i in self.word:

yield i

这里的迭代器,改成了生成器,因为在python里,只要函数的定义体有yield关键字,这就是生成器函数。

具体来看看行为:

def gen():

yield 1

yield 2

定义一个函数,看看它的行为:

gen()

Out[12]: <generator object gen at 0x000001C8DBAD36D0>

next(gen())

Out[13]: 1

g = gen()

next(g)

Out[16]: 1

next(g)

Out[17]: 2

next(g)

Traceback (most recent call last):

File "<ipython-input-18-5f315c5de15b>", line 1, in <module>

next(g)

StopIteration

通过next方法获取下一个元素,当获取结束后,再调用next会抛出StopIteration。

看看官方文档怎么描述的?

That generator then controls the execution of the generator function. The execution starts when one of the generator’s methods is called. At that time, the execution proceeds to the first yield expression, where it is suspended again, returning the value of expression_list to the generator’s caller. By suspended, we mean that all local state is retained, including the current bindings of local variables, the instruction pointer, the internal evaluation stack, and the state of any exception handling. When the execution is resumed by calling one of the generator’s methods, the function can proceed exactly as if the yield expression were just another external call. The value of the yield expression after resuming depends on the method which resumed the execution. If __next__() is used (typically via either a for or the next() builtin) then the result is None. Otherwise, if send() is used, then the result will be the value passed in to that method.

这就是所谓的惰性实现:尽可能的延后取值

在itertools,https://docs.python.org/3.4/library/itertools.html文档中可以看到很多相关元素。

那生成器和迭代器的关系:

--接口,python的迭代器协议定义了__next__,__iter__方法,而生成器实现了这两个方法。

--实现方式,生成器可以使用含有yield关键字的函数或者生成器表达式,属于GeneratorType类型,所有生成器都实现了迭代器。

--概念:迭代器用于遍历集合,从中产出元素。生成器可能无需遍历就能生成值,即使依附了集合,还可能会派生自元素的其他值。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
整合单细胞和bulk RNA数据确定心力衰竭的关键细胞类型和生物标志物
文章标题:Key Cell Types and Biomarkers in Heart Failure Identified through Analysis of Single-Cell and Bulk RNA Sequencing Data【整合单细胞和bulk RNA数据确定心力衰竭中的关键细胞类型和生物标志物】
生信技能树jimmy
2024/03/19
5540
整合单细胞和bulk RNA数据确定心力衰竭的关键细胞类型和生物标志物
单细胞RNA分析揭示了器官特异性细胞类型易受 SARS-CoV-2 感染的潜在风险
利用六种已确认的 COVID-19 受体( ACE2、TMPRSS2、NRP1、AXL、FURIN和CTSL)的表达信息,证明了巨噬细胞是最可能与肺中 SARS-CoV-2 发病机制相关的细胞。除了广泛报道的“趋化因子风暴(chemokine storm)”外,我们还确定了核糖体相关途径,这些途径也可能是 COVID-19 肺部感染患者的潜在治疗靶点。细胞间通讯分析和轨迹分析显示,M1 样巨噬细胞与重症 COVID-19 患者的相关性最高。
生信技能树jimmy
2022/03/14
5480
单细胞RNA分析揭示了器官特异性细胞类型易受 SARS-CoV-2 感染的潜在风险
不同人群冠脉中血管生理相关细胞分型的单细胞转录图谱
研究:从3例心脏移植患者中取正常血管(3条主动脉、2条肺动脉、9条冠状动脉)做单细胞测序分析细胞异质性。聚类结果显示有25簇细胞群统计为10类,其中血管平滑肌细胞最多。对比不同动脉细胞组成,发现了一些血管特异性平滑肌细胞及成纤维细胞亚群。正常情况下血管平滑肌及成纤维细胞之间交流密切。动脉粥样硬化相关基因在内皮细胞和巨噬细胞中富集、内皮细胞与免疫细胞间的联系在动脉粥样硬化中增强。ICAM1/VCAM1和ITGB2之间相互作用可能是动脉粥样硬化的重要机制。
生信技能树jimmy
2023/02/10
7310
不同人群冠脉中血管生理相关细胞分型的单细胞转录图谱
心脏在心力衰竭和恢复过程中的单细胞分析
文章标题:《Single-cell reconstruction of the adult human heart during heart failure and recovery reveals the cellular landscape underlying cardiac function》
生信技能树jimmy
2023/09/24
4460
心脏在心力衰竭和恢复过程中的单细胞分析
接受抗原驱动的过敏性小鼠皮炎的的单细胞转录组对于特应性皮炎的研究
结果:文章主要探究三个主要的亚群(成纤维,内皮,角质)和免疫相关基因之间的联系,侧面证明成纤维细胞、内皮细胞中可能促进过敏性皮肤炎症的新途径。OVA致敏导致T细胞、树突状细胞、巨噬细胞、肥大细胞/嗜碱性粒细胞、成纤维细胞等比例差异显著。主要的关键基因IL-4和IL-13驱动嗜酸性粒细胞、嗜碱性粒细胞和TH2细胞的趋化发展,抑制角质细胞(KC)分化和抗菌肽的产生,损害皮肤屏障功能,促进表皮脂质异常等。文章最后发现主要是肥大细胞/嗜碱性粒细胞在OVA致敏小鼠皮肤中高表达Il4和ll13基因。
生信技能树jimmy
2023/02/10
6520
接受抗原驱动的过敏性小鼠皮炎的的单细胞转录组对于特应性皮炎的研究
scRNA-seq揭示牙源性角化囊肿内富含 CXCL 的成纤维细胞
牙源性角化囊肿 (OKC) 是一种局部侵袭性颌部囊性病变,其特点是生长潜力相对较高且有复发倾向。本文旨在定义牙源性角化囊 (OKC) 的细胞亚群,特别是与血管生成相关的细胞亚群,并探索血管生成的潜在调节机制。对来自 3 名 OKC 供体的 14,072 个细胞进行了单细胞 RNA 测序,在 OKC 的上皮中鉴定出 5 种不同的细胞类型,并在 OKC 成纤维细胞中鉴定了 3 种不同的细胞类型,表明病灶内异质性很高。
生信技能树jimmy
2022/06/13
5760
scRNA-seq揭示牙源性角化囊肿内富含 CXCL 的成纤维细胞
【单细胞文献解读】肺癌微环境中的基质细胞图谱
肺癌是人类肿瘤的头号杀手。虽然近年来靶向治疗和免疫治疗取得了突破性进展,但患者仍会出现耐药、免疫治疗无效等情况。在单细胞水平上研究可以精确了解患者体内、以及患者间的异质性,提高细胞差异性研究的分辨率,帮助更好指导治疗。
作图丫
2022/03/29
7180
【单细胞文献解读】肺癌微环境中的基质细胞图谱
心肌梗死心脏的单细胞和空间转录组学分析
文章标题:《Single-cell and spatial transcriptomics of the infarcted heart define the dynamic onset of the border zone in response to mechanical destabilization》
生信技能树jimmy
2024/05/11
8370
心肌梗死心脏的单细胞和空间转录组学分析
综述精读 | 中性粒细胞从保护到致病的多种作用 | Nat.Immunol.
生信菜鸟团
2024/12/27
1.2K0
综述精读 | 中性粒细胞从保护到致病的多种作用 | Nat.Immunol.
【单细胞文献解读】晚期非小细胞肺癌的单细胞图谱
NSCLC (非小细胞肺癌)是一种高度异质性的疾病。癌细胞和周围微环境共同决定了疾病的进展以及对治疗的反应。了解NSCLC的细胞生态环境,有助于指导个体化治疗。
作图丫
2022/03/28
5720
【单细胞文献解读】晚期非小细胞肺癌的单细胞图谱
单细胞分析揭示协同作用的肿瘤微环境动态有助于确定胰腺癌的亚型
背景:胰腺导管腺癌 (PDAC) 样本的bulk RNA 分析因肿瘤微环境 (TME:即来自成纤维细胞、内分泌、外分泌和免疫细胞的信号) 而变得复杂。虽然已经建立了具有预后意义的肿瘤和基质亚型,但对驱动不同免疫和基质图谱的潜在信号的理解仍然不完整。
生信技能树jimmy
2024/04/19
7650
单细胞分析揭示协同作用的肿瘤微环境动态有助于确定胰腺癌的亚型
单细胞揭示免疫激活的肿瘤微环境与晚期HCC对atezolizumab+贝伐的临床反应相关
背景:尽管atezolizumab加贝伐是晚期肝细胞癌(HCC)的标准治疗方法,但很大一部分患者并未获得持久获益。本研究旨在通过研究免疫激活在肿瘤微环境(TME)中的作用来确定这种疗法的预测性生物标志物。
生信菜鸟团
2025/03/31
1240
单细胞揭示免疫激活的肿瘤微环境与晚期HCC对atezolizumab+贝伐的临床反应相关
单细胞转录组揭示FAP +成纤维细胞和SPP1 +巨噬细胞在结直肠癌中的相互作用
结直肠癌 (CRC) 是第三大最常见的恶性肿瘤(仅次于肺癌和乳腺癌),每年在全世界造成约 800,000 人死亡。最新的免疫检查点阻断 (ICB) 策略可以应用于 CRC 治疗,不过PD-1 靶向抗体 pembrolizumab 仅对具有高微卫星不稳定性 (MSI-H) 的错配修复缺陷肿瘤有效,而它仅占转移性 CRC 病例的 < 5 % 。因此有必要了解CRC肿瘤微环境中的细胞联系,并寻找潜在的干预靶点来提高免疫治疗的效果。
生信技能树jimmy
2023/08/31
2.7K0
单细胞转录组揭示FAP +成纤维细胞和SPP1 +巨噬细胞在结直肠癌中的相互作用
细数免疫应答中重要的细胞因子
细胞因子可以调节细胞间相互作用,调控免疫应答。那些你听说过的“细胞因子风暴”,“致热与炎症病理损害”,“肿瘤发生及免疫逃逸”,
作图丫
2022/03/29
1.5K0
单细胞RNA测序(scRNA-seq)揭示了小肠神经内分泌癌患者肝转移瘤特异性的治疗靶点
文章标题:《Comparative single-cell RNA sequencing (scRNA-seq) reveals liver metastasis-specific targets in a patient with small intestinal neuroendocrine cancer》
生信技能树jimmy
2023/10/17
4170
单细胞RNA测序(scRNA-seq)揭示了小肠神经内分泌癌患者肝转移瘤特异性的治疗靶点
文献分享---人皮肤创伤愈合的时空单细胞路线图
追风少年i
2025/05/22
1370
文献分享---人皮肤创伤愈合的时空单细胞路线图
单细胞揭示不同类型转录重构助力人类前列腺癌研究进展
前列腺癌仍然是全世界最普遍的男性恶性肿瘤。惰性患者可以存活数年而无进展,而侵袭性患者可能迅速转移并变得无法治愈。尽管近年来总体上前列腺癌的发病率有所下降,但同时观察到晚期或转移性前列腺癌患者稳步增加,主张改善治疗策略。因此,迫切需要进一步了解前列腺癌的异质性。以前的研究是基于批量测序的,它代表了来自肿瘤和微环境(TME)的信号集体平均反映,可能忽略了可能推动疾病发展的特异细胞群。单细胞RNA测序可以解开细胞建立协通信互作网络和了解不同肿瘤以及TME关键进化成分。
生信技能树jimmy
2021/04/16
1.4K0
单细胞揭示不同类型转录重构助力人类前列腺癌研究进展
scRNA-seq揭示胰腺导管腺癌恶性进展过程中肿瘤微环境的动态变化
胰腺导管腺癌(PDAC)在所有胃肠道肿瘤中死亡率最高。根据年度癌症统计报告,最近 PDAC 的预后仅略有改善,5 年生存率为 8-9%。主要归因于PDAC缺乏早期诊断的可靠标志物、手术切除率低和放化疗耐药,只有15-20%的胰腺癌患者符合根治性切除术的条件,而根治性切除术是唯一可能的治愈性疗法。PDAC复杂的瘤内异质性和特殊的肿瘤微环境为制定有效的治疗策略带来了巨大挑战。
生信技能树jimmy
2022/06/13
9260
scRNA-seq揭示胰腺导管腺癌恶性进展过程中肿瘤微环境的动态变化
综述 | Nature | 更新一下关于 2 型免疫的认知
生信菜鸟团
2025/02/03
3240
综述 | Nature | 更新一下关于 2 型免疫的认知
肝移植IRI相关的细胞及分子机制(一)
原文题目为:Ischaemia reperfusion injury in liver transplantation: Cellular and molecular mechanisms 去年发表于Liver International杂志
生信菜鸟团
2020/09/14
9850
肝移植IRI相关的细胞及分子机制(一)
推荐阅读
整合单细胞和bulk RNA数据确定心力衰竭的关键细胞类型和生物标志物
5540
单细胞RNA分析揭示了器官特异性细胞类型易受 SARS-CoV-2 感染的潜在风险
5480
不同人群冠脉中血管生理相关细胞分型的单细胞转录图谱
7310
心脏在心力衰竭和恢复过程中的单细胞分析
4460
接受抗原驱动的过敏性小鼠皮炎的的单细胞转录组对于特应性皮炎的研究
6520
scRNA-seq揭示牙源性角化囊肿内富含 CXCL 的成纤维细胞
5760
【单细胞文献解读】肺癌微环境中的基质细胞图谱
7180
心肌梗死心脏的单细胞和空间转录组学分析
8370
综述精读 | 中性粒细胞从保护到致病的多种作用 | Nat.Immunol.
1.2K0
【单细胞文献解读】晚期非小细胞肺癌的单细胞图谱
5720
单细胞分析揭示协同作用的肿瘤微环境动态有助于确定胰腺癌的亚型
7650
单细胞揭示免疫激活的肿瘤微环境与晚期HCC对atezolizumab+贝伐的临床反应相关
1240
单细胞转录组揭示FAP +成纤维细胞和SPP1 +巨噬细胞在结直肠癌中的相互作用
2.7K0
细数免疫应答中重要的细胞因子
1.5K0
单细胞RNA测序(scRNA-seq)揭示了小肠神经内分泌癌患者肝转移瘤特异性的治疗靶点
4170
文献分享---人皮肤创伤愈合的时空单细胞路线图
1370
单细胞揭示不同类型转录重构助力人类前列腺癌研究进展
1.4K0
scRNA-seq揭示胰腺导管腺癌恶性进展过程中肿瘤微环境的动态变化
9260
综述 | Nature | 更新一下关于 2 型免疫的认知
3240
肝移植IRI相关的细胞及分子机制(一)
9850
相关推荐
整合单细胞和bulk RNA数据确定心力衰竭的关键细胞类型和生物标志物
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档