给定一个迭代器(就像一个iter = itertools.count()
的无限序列),我可以得到next(iter)
的第一个迭代器。你得到所有但是第一个?
我意识到我能做到
def rest(iter):
next(iter)
return (x for x in iter)
但是内置了什么?
答案 0 :(得分:3)
你可以先分开,然后用
分开first, *rest = iter
但这实现了整个迭代器 - rest
现在包含一个列表。
您还可以使用itertools.islice
根据开始,停止和步骤获取可迭代的子集。
>>> from itertools import islice
>>> [*range(9)]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> [*islice(range(9), 1, None)]
[1, 2, 3, 4, 5, 6, 7, 8]
islice
仍然是惰性的,如果迭代器是无限的或非常长的话,这可能更好。
理解迭代器包含状态并且是可变的。所以一旦你有了迭代器,如果你选择了下一个迭代器,那么它就不再是其余部分。
>>> spam = iter(range(9))
>>> next(spam)
0
>>> [*spam]
[1, 2, 3, 4, 5, 6, 7, 8]