Python:如何断言迭代的第一个元素的类型?

时间:2015-05-21 15:03:30

标签: python iterator iterable

我正在寻找一个" 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)

但这显然会修改断言中迭代器的状态。

有没有一种简单的方法可以在不修改迭代器的第一个元素的情况下查看它?

1 个答案:

答案 0 :(得分:2)

我当前(因为我觉得难看)解决方案是:

from itertools import tee

def foo(it):
    if __debug__:
        it1, it2 = tee(it, 2)
        assert isinstance(next(it1), tuple)
        it = it2
    ...

有没有更好/更酷的方式来窥探我不知道的第一个元素?