Ich habe zwei Listen der Länge n und n + 1:
%Vor%Ich möchte eine Funktion, die als Ergebnis eine Liste mit alternativen Elementen aus den beiden gibt, das heißt
%Vor%Folgendes funktioniert, sieht aber nicht schick aus:
%Vor%Kann jemand eine pythischere Art vorschlagen, dies zu tun? Danke!
IMHO der beste Weg ist:
%Vor%Es ist auch schneller als Summe und reduziert Wege.
UPD Sorry, dass deine zweite Liste um ein Element größer ist :) Es gibt einen anderen verrückten Weg:
%Vor% zip()
erzeugt ein iterables Argument mit der Länge des kürzesten Arguments. Sie können a[-1]
entweder an das Ergebnis anhängen oder itertools.zip_longest
(izip_longest für Python 2.x) mit einem Füllwert verwenden und diesen Wert anschließend löschen.
Und Sie können mehr als zwei Eingabesequenzen mit dieser Lösung verwenden.
Wenn Sie den letzten Wert nicht anhängen, können Sie diesen dreckigen Ansatz versuchen, aber ich empfehle es nicht wirklich, es ist nicht klar:
%Vor% (Für Python 2.x verwenden Sie einfach /
)
das Mischen von zwei Listen ist ein Job für zip
:
für Listen unterschiedlicher Länge, definieren Sie Ihre eigene Funktion:
%Vor%mit der Antwort von Mihail gegeben können wir verkürze dies zu:
%Vor% Verwenden Sie izip_longest
, um die Lücken mit etwas zu füllen, das Sie nicht in Ihren Listen haben oder nicht im Ergebnis behalten möchten. Wenn Sie nichts in False
auflösen möchten, verwenden Sie die Standardwerte für izip_longest
und filter
:
Das Ergebnis ist: [1, 2, 3, 4, 5, 6, 8, 10]
Verwenden von None
zum Füllen der Lücken und Entfernen von Lücken mit filter
:
Für eine bessere Effizienz, wenn l1
oder l2
keine kurzen Listen sind, sondern z.B. Sehr lange oder unendliche Iterables, anstatt filter
use ifilter
, was Ihnen ein iterables ergibt, anstatt alles im Speicher in einer Liste zu speichern. Beispiel:
Sie könnten etwas wie folgt machen (unter der Annahme len(list_long)==len(list_short)+1
:
Wo ich /
für Ganzzahldivision verwende (genau was der Operator ist, hängt von der Sprachversion ab).
Tags und Links python