在Python中,迭代时使用xrange()
代替range
可以提高内存效率。
我遇到的麻烦是我想迭代一个大型列表 - 这样我需要使用xrange()
,之后我想检查一个任意元素。
使用range()
,很简单:x = range(...) + [arbitrary element]
。
但是使用xrange()
,似乎没有比这更清晰的解决方案:
for i in xrange(...):
if foo(i):
...
if foo(arbitrary element):
...
有关清洁解决方案的任何建议吗?有没有办法"追加"生成器的任意元素?
答案 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]):
...