[Python-ideas] Can we add "zip and assert equal length" to the standard library?

Peter O'Connor peter.ed.oconnor at gmail.com
Fri Jul 27 13:02:37 EDT 2018


I find that about 90% of the time I want want to zip iterators together, I
expect them to be the same length and want to throw an exception if they
aren't.  Yet there is not currently a solution for this in the standard
library for this, and as a result I always have to take this function
everywhere I go:


    def zip_equal(*iterables):
        """
        Zip and raise exception if lengths are not equal.

        Taken from solution by Martijn Pieters, here:

http://stackoverflow.com/questions/32954486/zip-iterators-asserting-for-equal-length-in-python

        :param iterables: Iterable objects
        :return: A new iterator outputting tuples where one element comes
from each iterable
        """
        sentinel = object()
        for combo in zip_longest(*iterables, fillvalue=sentinel):
            if any(sentinel is c for c in combo):
                raise ValueError('Iterables have different lengths.
Iterable(s) #{} (of 0..{}) ran out first.'.format([i for i, c in
enumerate(combo) if c is sentinel], len(combo)-1))
            yield combo

Would anybody object to adding this to the standard library for Python 3.8?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20180727/d96f238f/attachment.html>


More information about the Python-ideas mailing list