【发布时间】:2015-08-03 08:18:02
【问题描述】:
我正在寻找一种“pythonic”方式来断言迭代中第一个元素的类型。
例如,如果我有以下列表:
l = [(1,2,3), (4,5,6), ...]
它传入的函数,我可以简单地做:
def foo(l):
assert isinstance(l[0], tuple)
...
现在我正在寻找类似的东西,它也适用于迭代器,但不会将整个列表加载到 ram 中。我可以试试:
def foo(it):
assert isinstance(next(it), tuple)
...
it = iter(l)
foo(it)
但这显然会修改断言中迭代器的状态。
有没有一种简单的方法可以在不修改迭代器的第一个元素的情况下查看它?
【问题讨论】:
-
谢谢,没有找到那个 dup :-/ 但是在他们的答案中使用
itertools.chain或在我的下面使用itertools.tee有点相同... -
仅供参考,我通过搜索 "Python peek iterator" 找到了它 - 另请参阅 code.activestate.com/recipes/577361-peek-ahead-an-iterator
-
是的,我太专注于“断言迭代器的第一个元素”,我想......我会把这个留给其他人去寻找。