Я искал способ 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
Спасибо.