向 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):
        ...