zip_longest without fillvalue

Ich suche nach einem Mittelweg zwischen Pythonszip undzip_longest Funktionen (von der itertools Modul), das alle gegebenen Iteratoren erschöpft, aber nichts ausfüllt. So sollte es beispielsweise Tupel wie folgt transponieren:

(11, 12, 13    ),        (11, 21, 31, 41),
(21, 22, 23, 24),  -->   (12, 22, 32, 42),
(31, 32        ),        (13, 23,     43),
(41, 42, 43, 44),        (    24,     44)

(Leerzeichen zur besseren grafischen Ausrichtung hinzugefügt.)

Ich habe es geschafft, eine grobe Lösung zu komponieren, indem ich dasfillvalues nachzip_longest.

def zip_discard(*iterables, sentinel = object()):
    return map(
            partial(filter, partial(is_not, sentinel)), 
            zip_longest(*iterables, fillvalue=sentinel))

Gibt es eine Möglichkeit, dies zu tun, ohne zunächst die Sentinels einzuführen? Kann dies mit @ verbessert werdeyield? Welcher Ansatz scheint am effizientesten zu sein?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage