2

xrange()在 Python 中,使用它比range在迭代时更节省内存。

我遇到的麻烦是我想遍历一个大列表——这样我需要使用xrange(),然后我想检查一个任意元素。

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

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

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

对更清洁的解决方案有什么建议吗?有没有办法将任意元素“附加”到生成器?

4

2 回答 2

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):
        ...
于 2016-09-01T18:22:12.530 回答
7

我建议将arbitrary_element检查置于循环之外,但如果你想让它成为循环的一部分,你可以使用itertools.chain

for i in itertools.chain(xrange(...), [arbitrary_element]):
    ...
于 2016-09-01T18:21:35.613 回答