Warum Python-Liste keine shift/unshift Methoden?

Frage ich mich, warum der Standard - list in Python keine shift, unshift Methoden. Vielleicht gibt es einen offensichtlichen Grund dafür mag die Art, die Listen sind geordnet im Speicher.

Also aktuell weiß ich, dass ich verwenden können, fügen Sie zum hinzufügen eines Elements am Ende einer Liste und löschen zum entfernen eines Elements. Allerdings kann ich nur verwenden Liste Verkettung immitate die das Verhalten eines fehlenden shift oder unshift Methode.

>>>a = [1,2,3,4,5]

>>>a.append(6)
>>>a
[1,2,3,4,5,6]

>>>a.pop()
[1,2,3,4,5]

>>>a = [0] + a # Unshift /Push
>>>a
[0,1,2,3,4,5]

>>>a = a[1:] # Shift /UnPush
>>>a
[1,2,3,4,5]

Hab ich was verpasst?

  • pop(0), insert(0,x) ?
  • Warum? Fragen Sie den Autoren!
  • Demonstrieren Sie mit diesem code, können Sie einfach shift und unshift ohne spezielle Methoden?
  • Ich denke, er wird gefragt, vielleicht ein software-DEU Perspektive, warum bestimmte Vorgänge nicht Ihre logische Gegensätze.
  • Nicht wirklich, weil Sie auf Ihrer Liste nach dem Wert, nicht nach dem index 🙁
  • Nein, diejenigen sind, die durch den index.
  • Gut, mit slice, den Sie erhalten, die gleiche Sache, nicht wahr? shift left by 2 : a = a[2:]+a[:2], shift right by 2 : a = a[-2:]+a[:-2]. Oder ist das nicht das, was Sie gefragt?
  • Es mag auch erwähnenswert sein, dass Python ' s list geben Sie nicht tatsächlich eine verknüpfte Liste, es ist ein array. So, beim hinzufügen eines Werts am Anfang der Liste ist rechnerisch teuer als für einen regulären verknüpften Liste, und es könnte führen zu (noch mehr) Verwirrung.
  • Weiter zu gehen, Python Listen sind arrays von Namen (im Prinzip wie ein array von Zeigern), die ist auch ganz anders als einen zusammenhängenden Speicher-Arrays wie in C, In Python, der Speicherplatz für die Listenelemente ist zusammenhängend (in der Regel), aber die Liste der Elemente selbst können nur Namen von diesem Punkt aus zu allen möglichen verrückten Winkeln des Gedächtnisses. Oft, wenn Sie tun müssen Operationen, die wäre effizienter für die traditionellen arrays, bedeutet das, Sie sollten mit etwas implementiert, dass die buffer " - Protokolls, wie array.array oder ndarray NumPy, statt der Liste.
  • Aber perl lösten das problem, indem Sie die Liste in der Mitte des Arrays, so dass unshifting und schieben nehmen Sie die gleiche Menge an Zeit (wie lange, wie Sie tun es nicht so viel, dass Sie eine neue array). Aber diese Art von Fragen, die in der Regel einkochen "Fragen die Autoren".
  • Es wird ein wenig schwierig, wenn man einen kleinen integer oder ein interniert string in eine Liste, da dann der Eintrag in der Liste, sagen my_list ein[i] ist ein name, der bezieht sich auf eine singuläre Entität repräsentiert den Wert. Aber für größere Ganzzahlen und un-strings interniert, kann es sein, dass der einzige name, den es in einem bestimmten Programm für die Entität wird der name "my_list ein[i]", welche Art von tricks, die Sie in dem glauben, dass das Objekt sozusagen "Leben" in der Liste der reservierten Arbeitsspeicher, aber eigentlich nur ein name für Sie lebt in der Liste.
  • warum nicht einfach def popfirst(l): l.reverse() l.pop() l.reverse() return l

InformationsquelleAutor nowox | 2015-12-10
Schreibe einen Kommentar