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 dasfillvalue
s 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?