向 xrange() 添加任意元素?
Add an arbitrary element to an xrange()?
在Python中,迭代时使用xrange()
比range
更节省内存。
我遇到的问题是我想遍历一个大列表——因此我需要使用 xrange()
然后我想检查任意元素。
有了 range()
,很简单:x = range(...) + [arbitrary element]
.
但是对于 xrange()
,似乎没有比这更干净的解决方案了:
for i in xrange(...):
if foo(i):
...
if foo(arbitrary element):
...
对更清洁的解决方案有什么建议吗?有没有办法 "append" 生成器的任意元素?
我建议将 arbitrary_element
检查保留在循环之外,但如果你想让它成为循环的一部分,你可以使用 itertools.chain
:
for i in itertools.chain(xrange(...), [arbitrary_element]):
...
itertools.chain
允许您从多个可迭代对象中创建一个组合迭代器而无需连接它们(因此没有昂贵的临时对象):
from itertools import chain
# Must wrap arbitrary element in one-element tuple (or list)
for i in chain(xrange(...), (arbitrary_element,)):
if foo(i):
...
在Python中,迭代时使用xrange()
比range
更节省内存。
我遇到的问题是我想遍历一个大列表——因此我需要使用 xrange()
然后我想检查任意元素。
有了 range()
,很简单:x = range(...) + [arbitrary element]
.
但是对于 xrange()
,似乎没有比这更干净的解决方案了:
for i in xrange(...):
if foo(i):
...
if foo(arbitrary element):
...
对更清洁的解决方案有什么建议吗?有没有办法 "append" 生成器的任意元素?
我建议将 arbitrary_element
检查保留在循环之外,但如果你想让它成为循环的一部分,你可以使用 itertools.chain
:
for i in itertools.chain(xrange(...), [arbitrary_element]):
...
itertools.chain
允许您从多个可迭代对象中创建一个组合迭代器而无需连接它们(因此没有昂贵的临时对象):
from itertools import chain
# Must wrap arbitrary element in one-element tuple (or list)
for i in chain(xrange(...), (arbitrary_element,)):
if foo(i):
...