Ich habe eine Liste mit der Größe < N und möchte sie mit einem Wert auf die Größe N auffüllen.
Natürlich kann ich so etwas wie das Folgende verwenden, aber ich bin der Meinung, dass es etwas geben sollte, das ich verpasst habe:
>>> N = 5
>>> a = [1]
>>> map(lambda x, y: y if x is None else x, a, ['']*N)
[1, '', '', '', '']
python
list
list-manipulation
Newtover
quelle
quelle
Antworten:
oder wenn Sie nicht an
a
Ort und Stelle ändern möchtenSie können jederzeit eine Unterklasse von Listen erstellen und die Methode nach Belieben aufrufen
quelle
Ich denke, dieser Ansatz ist visueller und pythonischer.
quelle
N < len(a)
. Dies ist der Fall für die zweite Antwort, die Sie gegeben haben.Hierfür gibt es keine eingebaute Funktion. Sie können jedoch die integrierten Funktionen für Ihre Aufgabe erstellen (oder alles: p).
(Geändert von itertools
padnone
undtake
Rezepten)Verwendung:
quelle
Die Antwort von gnibbler ist besser, aber wenn Sie ein eingebautes benötigen, können Sie Folgendes verwenden
itertools.izip_longest
(zip_longest
in Py3k):Dadurch wird eine Liste der
( i, list[ i ] )
ausgefüllten Tupel an None zurückgegeben. Wenn Sie die Theke loswerden müssen, gehen Sie wie folgt vor:quelle
operator.itemgetter()
. Auch dieNone
Werte mussten durch ersetzt werden""
.Sie können auch einen einfachen Generator ohne Einbauten verwenden. Aber ich würde die Liste nicht auffüllen, sondern die Anwendungslogik mit einer leeren Liste umgehen lassen.
Jedenfalls Iterator ohne Buildins
quelle
Wenn Sie mit None anstelle von '' auffüllen möchten, erledigt map () die Aufgabe:
quelle
more-itertools
ist eine Bibliothek, die ein speziellespadded
Tool für diese Art von Problem enthält:Alternativ können
more_itertools
auch Python- itertools-Rezepte implementiert werden, einschließlichpadnone
undtake
wie von @kennytm erwähnt, sodass sie nicht erneut implementiert werden müssen:Wenn Sie die Standardauffüllung ersetzen möchten
None
, verwenden Sie ein Listenverständnis:quelle
Kennytm verlassen:
quelle
Sie können den
*
iterierbaren Entpackungsoperator verwenden :Ausgabe:
quelle
Dies vermeidet jede zusätzliche Zuordnung, im Gegensatz zu jeder Lösung, die vom Erstellen und Anhängen der Liste abhängt
[value] * extra_length
. Die "verlängern" -Methode ruft zuerst__length_hint__
den Iterator auf und erweitert die Zuordnung uml
diesen Betrag, bevor sie vom Iterator ausgefüllt wird.quelle