Wie stelle ich dem Anfang einer Liste eine Ganzzahl voran?
[1, 2, 3] ⟶ [42, 1, 2, 3]
Gen
Wie stelle ich dem Anfang einer Liste eine Ganzzahl voran?
[1, 2, 3] ⟶ [42, 1, 2, 3]
Annullieren
>>> x = 42
>>> xs = [1, 2, 3]
>>> xs.insert(0, x)
>>> xs
[42, 1, 2, 3]
Wie es funktioniert:
list.insert(index, value)
Ein Element an einer bestimmten Position einfügen. Das erste Argument ist der Index des Elements, vor dem eingefügt werden soll, also xs.insert(0, x)
fügt am Anfang der Liste ein und xs.insert(len(xs), x)
ist äquivalent zu xs.append(x)
. Negative Werte werden als relativ zum Ende der Liste behandelt.
Der effizienteste Ansatz. Schneller als [x]+[y]. Siehe Lösungen hier: stackoverflow.com/questions/8537916/…
– Simon Steinberger
19. Oktober 2015 um 21:41 Uhr
@BlackJack Die Frage bezieht sich darauf, wie man eine ganze Zahl an den Anfang der Liste anhängt. Was auch immer er beschreibt, dem ist nicht das Richtige zu folgen. Warum also ihn dazu bringen, den falschen Weg einzuschlagen? wenn es besseres gibt, was er für seine Anforderung tun kann.
– Aufheben
19. Oktober 2016 um 8:19 Uhr
In diesem Fall sollte der Fragetitel anders lauten. Jedenfalls hat es keinen Sinn zu streiten, da der Punkt für uns beide klar ist. Trotzdem danke für den Hinweis. 🙂
– Aufheben
19. Oktober 2016 um 13:00 Uhr
Verwenden Sie die Funktion append() und dann die Funktion reverse(), da die Funktion insert(0,val) mehr Zeit in Anspruch nimmt, da jedes Element verschoben werden muss. Ich habe ein Zeitüberschreitungsproblem aufgrund des Einfügens erlebt
– Tomatenmeister
5. Februar 2021 um 14:09 Uhr
@VishalYadav Kannst du bitte das Benchmarking teilen?
– Aufheben
8. Februar 2021 um 10:21 Uhr
Rohit Jain
>>> x = 42
>>> xs = [1, 2, 3]
>>> [x] + xs
[42, 1, 2, 3]
Hinweis: nicht verwenden list
als Variablenname.
Ich habe gerade etwas Benchmarking gemacht. li.insert(0, a)
ist etwa 5x schneller als li = [a] + li
. Denken Sie daran, wenn Sie dies oft tun.
– Marcel Pfeiffer
26. Mai 2015 um 8:09 Uhr
@MarcelPfeiffer Das sollte beachtet werden li.insert(0, a)
mutiert li
. li = [a] + li
erstellt eine neue Instanz mit allen Werten. Dies ist eine wichtige Unterscheidung, wenn andere Dinge einen Verweis auf die Listeninstanz haben.
– Unheiligsammler
31. Mai 2015 um 20:48 Uhr
Es wäre schön für Python, eine list.push_front(item)-Funktion hinzuzufügen. Dies ist offensichtlich und weniger fehleranfällig.
– Kemin Zhou
18. September 2016 um 3:21 Uhr
@KeminZhou Ich würde den Namen “prepend” bevorzugen, da er natürlich aus “append” folgt, da “push_front” natürlich aus “push_back” folgt.
– Gott der Lamas
15. November 2016 um 0:29 Uhr
@Gott der Lamas, da stimme ich dir zu. Kürzer ist immer besser.
– Kemin Zhou
15. November 2016 um 6:05 Uhr
Beachten Sie, dass, wenn Sie versuchen, diese Operation häufig auszuführen, insbesondere in Schleifen, eine Liste ist die falsche Datenstruktur.
Listen sind nicht für Änderungen an der Front optimiert, und somelist.insert(0, something)
ist ein O(n)-Betrieb.
somelist.pop(0)
und del somelist[0]
sind auch O(n)-Operationen.
Die richtige zu verwendende Datenstruktur ist a deque
von dem collections
Modul. deques bieten eine ähnliche Schnittstelle wie Listen, sind jedoch für Änderungen von beiden Endpunkten optimiert. Sie haben eine appendleft
Methode für Einfügungen an der Vorderseite.
Demo:
In [1]: lst = [0]*1000
In [2]: timeit -n1000 lst.insert(0, 1)
1000 loops, best of 3: 794 ns per loop
In [3]: from collections import deque
In [4]: deq = deque([0]*1000)
In [5]: timeit -n1000 deq.appendleft(1)
1000 loops, best of 3: 73 ns per loop
Manchmal ist das Wechseln von Strukturen keine Sache, die Sie einfach tun können, und wenn Sie eine Menge Zeug an den Anfang anhängen müssen, können Sie .reverse aufrufen, dann das ganze Zeug am Ende hinzufügen und dann wieder reverse aufrufen. Sie würden zwei O(n)-Operationen erhalten, aber dann die O(1)-Hinzufügungen der Liste verwenden.
– Tatarisieren
1. Oktober 2018 um 20:22 Uhr
in Bezug auf die Rechenzeit ist new_list = [x] + your_list
weniger effizient als your_list.insert(x)
?
– Charly Parker
21. Juli 2021 um 17:16 Uhr
Eine andere Möglichkeit, dasselbe zu tun,
list[0:0] = [a]
Sie können die Entpackliste verwenden:
a = 5
li = [1,2,3]
li = [a, *li]
=> [5, 1, 2, 3]
Basierend auf einigen (minimalen) Benchmarks mit dem timeit
Modul scheint das Folgende eine ähnliche, wenn nicht sogar bessere Leistung als die akzeptierte Antwort zu haben
new_lst = [a, *lst]
Wie bei [a] + list
Dadurch wird eine neue Liste erstellt und nicht mutiert lst
.
Wenn Sie die Liste mutieren möchten, verwenden Sie lst.insert(0, a)
.
sahil panindre
list_1.insert(0,ur_data)
Stellen Sie sicher, dass ur_data vom Typ String ist, also wenn Sie es haben data= int(5)
konvertieren Sie es in ur_data = str(data)
in Bezug auf die Rechenzeit ist
new_list = [x] + your_list
weniger effizient alsyour_list.insert(x)
?– Charly Parker
21. Juli 2021 um 17:15 Uhr