草庐IT

Iterator

全部标签

Python迭代器(Iterator)

文章目录一、迭代器二、可迭代对象三、iter()、next()函数for循环大体过程iter()获取一个可迭代对象的迭代器next()获取迭代器的数据四、自定义"迭代器"__iter__方法__next__方法五、案例升级六、for...in...循环的本质七、并不是只有for循环能接受可迭代对象八、总结一、迭代器迭代是访问集合元素的一种方式迭代器是一个可以记住遍历位置的对象。迭代器对象从第一个元素开始访问,直到所有的元素被访问结束。迭代器只能往前不会后退。二、可迭代对象能用for循环遍历的对象三、iter()、next()函数for循环大体过程iter()获取一个可迭代对象的迭代器nums=

python - 使用迭代器的最快(最 Pythonic)方式

我很好奇使用迭代器最快的方式是什么,并且是最Pythonic的方式。例如,假设我想用map内置函数创建一个迭代器,它会累积一些东西作为副作用。我实际上并不关心map的结果,只关心副作用,所以我想以尽可能少的开销或样板来完成迭代。像这样的东西:my_set=set()my_map=map(lambdax,y:my_set.add((x,y)),my_x,my_y)在这个例子中,我只是想通过迭代器来积累my_set中的东西,而my_set只是一个空集,直到我真正运行我的map。像这样的东西:for_inmy_map:pass或裸体[_for_inmy_map]有效,但它们都感觉笨拙。是否有

python - iter() 是如何工作的,它给出 "TypeError: iter(v, w): v must be callable"

这段代码有什么问题?l=[1,2,3,4,5,6]forvaliniter(l,4):print(val)返回TypeError:iter(v,w):vmustbecallable为什么callable(list)返回True而callable(l)却没有?编辑这里应该首选什么方法:手动休息另外一百人 最佳答案 来自iter帮助:iter(...)iter(collection)->iteratoriter(callable,sentinel)->iteratorGetaniteratorfromanobject.Inthefirs

python - 使用 "chunksize"和/或 "iterator"用 Pandas 打开选定的行

我有一个很大的csv文件,我用pd.read_csv打开它,如下所示:df=pd.read_csv(path//fileName.csv,sep='',header=None)由于文件很大,我希望能够按行打开它from0to511from512to1023from1024to1535...from512*nto512*(n+1)-1其中n=1、2、3...如果我将chunksize=512添加到read_csv的参数中df=pd.read_csv(path//fileName.csv,sep='',header=None,chunksize=512)然后我输入df.get_chunk(

python - 在 Python 中按排序顺序从排序的迭代器中产生?

有没有更好的方法将一堆排序的迭代器合并/整理成一个,以便它按排序顺序生成项目?我认为下面的代码有效,但我觉得我缺少一种更简洁、更简洁的方法。defsortIters(*iterables,**kwargs):key=kwargs.get('key',lambdax:x)nextElems={}currentKey=Noneforginiterables:try:nextElems[g]=g.next()k=key(nextElems[g])ifcurrentKeyisNoneork这个用例是我有一堆csv文件,我需要根据某个排序字段合并这些文件。它们足够大,我不想将它们全部读入列表并调

python - Python 中的列表和迭代器有什么区别?

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭7年前。Improvethisquestion我正在看书ThinkPython:Howtothinklikeacomputerscientist,它表示在Python3.x中,dict([listoftuples])返回一个iterator而不是list(就像Python2.7中的情况)。书上没有进一步解释,弄得我一头雾水。我特别想知道:迭代器和列表有何不同,以及通过列表返回迭代器有什么好处?

python - Python 中的迭代器选择器

是否有一种标准的pythonic方法可以从提供的迭代器列表中选择一个值而不推进那些未被选择的值?两个迭代器的一些类似的东西(不要判断得太难:它很快被放在一起只是为了说明这个想法):defiselect(i1,i2,f):e1_read=Falsee2_read=FalsewhileTrue:try:ifnote1_read:e1=next(i1)e1_read=Trueifnote2_read:e2=next(i2)e2_read=Trueiff(e1,e2):yielde1e1_read=Falseelse:yielde2e2_read=FalseexceptStopIteratio

python - 可迭代预期的原始文本文档,接收到字符串对象

我目前正在尝试构建朴素贝叶斯分类器,如thislink.中所述引用线X_new_tfidf=tfidf_transformer.transform(X_new_counts)在TrainingtheClassifier子标题下,我的代码中有类似的行,X_new_counts=count_vect.transform(input.plot_movie)应该采用可迭代作为转换函数的输入。input是来自DataFrame的记录,属于pd.Series类型,包含以下条目,我从中发送input.plot_movie作为转换函数的输入:但是,我收到以下错误:Iterableoverrawtext

python - 如何在 Python 中扩展/连接两个迭代器

这个问题在这里已经有了答案:HowtojointwogeneratorsinPython?(15个答案)关闭5年前。我想以一种高效的方式连接两个迭代器。假设我们有两个迭代器(在Python3中)l1=range(10)#iteratorover0,1,...,9l2=range(10,20)#iteratorover10,11,...,19如果我们将它们转换成列表,就很容易拼接起来y=list(l1)+list(l2)#0,1,,...,19但是,这可能效率不高。我想做这样的事y_iter=l1+l2#thisdoesnotwork在Python3中执行此操作的好方法是什么?

python - Python `list.extend(iterator)` 保证是惰性的吗?

总结假设我有一个iterator,当从中消耗元素时,它会执行一些副作用,例如修改列表。如果我定义一个列表l并调用l.extend(iterator),是否保证extend会将元素推送到l一个接一个,因为迭代器中的元素被消耗,而不是保存在缓冲区中然后一次全部推送?我的实验我在我的计算机上用Python3.7做了一个快速测试,根据该测试,list.extend似乎很懒惰。(请参阅下面的代码。)规范是否保证了这一点?如果是,规范中的何处提到了这一点?(此外,请随时批评我并说“这不是Pythonic,你这个傻瓜!”——尽管如果你想批评我也能回答这个问题,我将不胜感激。我问的部分原因出于我自己的