Ganzzahl an den Anfang der Liste in Python anhängen [duplicate]

Lesezeit: 4 Minuten

Benutzer-Avatar
Gen

Wie stelle ich dem Anfang einer Liste eine Ganzzahl voran?

[1, 2, 3]  ⟶  [42, 1, 2, 3]

  • 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:15 Uhr

Benutzer-Avatar
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

Benutzer-Avatar
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).

Benutzer-Avatar
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)

1131030cookie-checkGanzzahl an den Anfang der Liste in Python anhängen [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy