草庐IT

Iterator

全部标签

从迭代器中删除 N 个值的 Pythonic 解决方案

是否有从迭代器中删除n值的pythonic解决方案?您只需丢弃n值即可,如下所示:def_drop(it,n):for_inxrange(n):it.next()但在我看来,这并不像Python代码应有的那样优雅。我在这里缺少更好的方法吗? 最佳答案 我相信您正在寻找“消费”食谱http://docs.python.org/library/itertools.html#recipesdefconsume(iterator,n):"Advancetheiteratorn-stepsahead.Ifnisnone,consumeenti

python - "yield item"与 return iter(items) 相比有什么优势?

在下面的示例中,resp.results是一个迭代器。版本1:items=[]forresultinresp.results:item=process(result)items.append(item)returniter(items)版本2:forresultinresp.results:yieldprocess(result)在性能/内存节省方面,在版本1中返回iter(items)是否比简单地返回项目更好/更差?在“PythonCookbook”中,Alex说显式iter()“更灵活但不常使用”,但是返回iter(items)与版本2中的yield的优缺点是什么?此外,对迭代器和

python - 重复调用函数的函数?

考虑假设的函数repeatcall,它将一个无参数可调用func和一个正整数n作为参数,并返回一个列表其成员是通过执行func()n次获得的。它支持无限的愚蠢的hijinks流,例如:>>>repeatcall(lambda:id(dict()),5)[45789920,45788064,45807216,45634816,45798640]>>>urandom=lambda:struct.unpack('Q',open('/dev/urandom').read(8))[0]>>>repeatcall(urandom,3)[3199039843823449742,14990726001

python - 是否有与 Python 的 re.findall/re.finditer(迭代正则表达式结果)等效的 Perl?

在Python中编译的正则表达式模式haveafindallmethod执行以下操作:Returnallnon-overlappingmatchesofpatterninstring,asalistofstrings.Thestringisscannedleft-to-right,andmatchesarereturnedintheorderfound.Ifoneormoregroupsarepresentinthepattern,returnalistofgroups;thiswillbealistoftuplesifthepatternhasmorethanonegroup.Emp

python - __next__ 在生成器和迭代器中,什么是方法包装器?

我正在阅读有关生成器和迭代器以及__next__()的作用的文章.'__next__'indir(mygen).是真的'__next__'indir(mylist),是假的当我深入研究它时,'__next__'indir(mylist.__iter__())是真的为什么是__next__仅可列出但仅适用于__iter__()和mygen但不是mylist.怎么样__iter__()调用__next__当我们使用列表理解遍历列表时尝试手动步进(+1)生成器时,我调用mygen.__next__().它不存在。它仅作为mygen.__next__存在这称为方法包装器。什么是方法包装器,它有

python - 为什么排序后查询表会慢很多?

我有一个使用Pytables的Python程序并以这种简单的方式查询表:defget_element(table,somevar):rows=table.where("colname==somevar")row=next(rows,None)ifrow:returnelem_from_row(row)为了减少查询时间,我决定尝试用table.copy(sortby='colname')对表进行排序.这确实改善了查询时间(在where中花费),但增加了在next()中花费的时间内置功能提升了几个数量级!可能是什么原因?只有当表中有另一列时才会发生这种减慢,并且减慢会随着另一列的元素大小而

python - 如何获取一般文件类型的文件扩展名列表?

我正在尝试使用mimetypes模块获取基于MIME类型第一部分的文件扩展名列表。例如。'image'是'image/jpeg'、'image/png'等的第一部分这是我的代码:importmimetypesdefget_extensions_for_type(general_type):forextinmimetypes.types_map:ifmimetypes.types_map[ext].split('/')[0]==general_type:yieldextVIDEO=tuple(get_extensions_for_type('video'))AUDIO=tuple(get

python - itertools 或手写生成器 - 哪个更好?

我有许多Python生成器,我想将它们组合成一个新的生成器。我可以通过使用一堆yield语句的手写生成器轻松地做到这一点。另一方面,itertools模块就是为这样的事情而制作的,对我来说,创建我需要的生成器的pythonic方法似乎是将的各种迭代器连接在一起>itertools模块。然而,在手头的问题中,它很快就会变得相当复杂(生成器需要保持某种状态---例如是否正在处理第一个或后面的项目---,第i个输出进一步取决于在第i个输入项和各种输入列表的条件下,在将它们连接到生成的列表之前必须进行不同的处理。因为可以解决我的问题的标准迭代器的组合是---由于写下源代码的一维性质---几乎不

python - 在 xrange 对象上调用多个迭代器

为什么zip(*[xrange(5)]*2)给出[(0,0),(1,1),(2,2),(3,3),(4,4)]但是zip(*[iter(xrange(5))]*2)给出[(0,1),(2,3)]?我一直认为生成器是迭代器,所以生成器上的iter是空操作。例如,list(iter(xrange(5)))[0,1,2,3,4]与相同list(xrange(5))[0,1,2,3,4](对于Python3也是如此,但是使用list(zip(和range。) 最佳答案 iterable和iterator之间是有区别的。您可以使用iter(x

java - 在 Java 中显示列表与在 Python 中一样优雅

在Python中,将可迭代对象显示为逗号分隔列表非常容易:>>>iterable=["a","b","c"]>>>",".join(iterable)'a,b,c'是否有一种Java方法可以接近这种简洁性?(注意末尾没有“,”。) 最佳答案 以下是使用Guava的版本和Commons/Lang那Michaelreferredto:Listitems=Arrays.asList("a","b","c");//UsingGuavaStringguavaVersion=Joiner.on(",").join(items);//UsingC