从 python 迭代器直接生成子列表的最佳方法

Best way to directly generate a sublist from a python iterator

It is easy to convert an entire iterator sequence into a list 使用 list(iterator),但是 best/fastest 直接从迭代器创建子列表而不首先创建整个列表的方法是什么,即如何最好地创建 list(iterator)[m:n] 没有先创建整个列表?

显然不应该*(至少不总是)可以直接为 m > 0 这样做,但对于 n 应该小于序列的长度。 [p for i,p in zip(range(n), iterator)] 想到了,但这是最好的方法吗?

上下文很简单:创建整个列表会导致 RAM 溢出,因此需要对其进行分解。那么如何有效地做到这一点 and/or python-ic-ly?


*我提到的列表理解显然可以通过在执行前调用 next(iterator) m 次来用于 m > 0,但我不喜欢缺少 python-在这里。

itertools.islice:

from itertools import islice

itr = (i for i in range(10))
m, n = 3, 8
result = list(islice(itr, m, n))
print(result)
# [3, 4, 5, 6, 7]

此外,如果需要,您可以添加一个参数作为 step

itr = (i for i in range(10))
m, n, step = 3, 8, 2
result = list(islice(itr, m, n, step))
print(result)
# [3, 5, 7]