向xrange()添加任意元素?

时间:2016-09-01 18:19:23

标签: python generator xrange

在Python中,迭代时使用xrange()代替range可以提高内存效率。

我遇到的麻烦是我想迭代一个大型列表 - 这样我需要使用xrange(),之后我想检查一个任意元素。

使用range(),很简单:x = range(...) + [arbitrary element]

但是使用xrange(),似乎没有比这更清晰的解决方案:

for i in xrange(...):
    if foo(i):
        ...
if foo(arbitrary element):
        ...

有关清洁解决方案的任何建议吗?有没有办法"追加"生成器的任意元素?

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:7)

我建议保持arbitrary_element检查不在循环中,但如果你想让它成为循环的一部分,你可以使用itertools.chain

for i in itertools.chain(xrange(...), [arbitrary_element]):
    ...