итераторы zip, проверьте, отличается ли длина итераторов, нужен ли часовой объект? - PullRequest
0 голосов
/ 08 января 2020

Я искал способ go через два параллельных итератора, и возникла ошибка, если два итератора не исчерпали в одной и той же точке, что означает, что они имели разную длину.

I наткнулся на это решение, используя zip_longest, который я хотел бы использовать: итераторы zip, утверждающие равную длину в python Однако у меня есть вопрос об используемом объекте стража. Это рекомендуемый код:

from itertools import zip_longest

def zip_equal(*iterables):
    sentinel = object()
    for combo in zip_longest(*iterables, fillvalue=sentinel):
        if any(c is sentinel for c in combo):
            raise ValueError('Iterables have different lengths')
        yield combo

Зачем нужен сторожевой объект? Почему я не могу использовать стандартное значение заполнения, которое равно None, и выполнить проверку следующим образом:

def zip_equal(*iterables):
    for combo in zip_longest(*iterables):
        if any(c is None for c in combo):
            raise ValueError('Iterables have different lengths')
        yield combo

Спасибо.

...