2012-04-14 6 views
8

Ich habe eine list von etwa 40 Einträge. Und ich möchte häufig ein Element an den Anfang der Liste (mit ID 0) anhängen und möchte delete den last Eintrag (mit ID 40) der Liste.Eintrag zur Liste hinzufügen und entfernen Sie zuerst in Python

Wie mache ich das am besten?

like: (zB mit 5 Einträge)

[0] = "herp" 
    [1] = "derp" 
    [2] = "blah" 
    [3] = "what" 
    [4] = "da..." 

nach der Zugabe von "wuggah" und letzten Löschen sollte wie:

[0] = "wuggah" 
    [1] = "herp" 
    [2] = "derp" 
    [3] = "blah" 
    [4] = "what" 

oder ein Anfügen und Löschen zuerst.

Und ich möchte nicht manuell sie nacheinander alle Einträge auf die nächste ID verschieben. collections.deque

+0

Ich schlage vor, Sie ein wenig mehr vor dem Posten zu recherchieren .. Die Antwort ist buchstäblich auf jeder ersten Seite der Einführung zu Listen. – Mellkor

+2

"Und ich möchte nicht manuell alle Einträge nacheinander in die nächste ID verschieben." Intern weist ein Listenobjekt eine größere Liste als die Größe der aktuell verwendeten Liste zu (10 Elemente, aber die Liste ist tatsächlich viel größer als diese). Also hinter der Bühne tut es alles für Sie - das amortisiert die Laufzeit der Insertion, Pop an einer bestimmten Position und andere arbeitet so niedrig wie möglich. http://wiki.python.org/moin/TimeComplexity – CppLearner

Antwort

7

Verwendung:

>>> import collections 
>>> q = collections.deque(["herp", "derp", "blah", "what", "da.."]) 
>>> q.appendleft('wuggah') 
>>> q.pop() 
'da..' 
>>> q 
deque(['wuggah', 'herp', 'derp', 'blah', 'what']) 
+0

Danke. Ist das das gleiche wie 'myList.insert (0," wuggah ")'? –

+2

@wagglewax Ja, außer dass dies eine O (1) -Operation anstelle von O (n) ist. –

10

Verwenden insert() ein Element am Anfang der Liste zu setzen:

myList.insert(0, "wuggah") 

Verwenden pop() zu entfernen, und ein Element in der Liste zurück. Pop ohne Argumente erscheint das letzte Element in der Liste

myList.pop() #removes and returns "da..." 
4

Verwenden collections.deque

In [21]: from collections import deque 

In [22]: d = deque([], 3) 

In [24]: for c in '12345678': 
    ....:  d.appendleft(c) 
    ....:  print d 
    ....: 
deque(['1'], maxlen=3) 
deque(['2', '1'], maxlen=3) 
deque(['3', '2', '1'], maxlen=3) 
deque(['4', '3', '2'], maxlen=3) 
deque(['5', '4', '3'], maxlen=3) 
deque(['6', '5', '4'], maxlen=3) 
deque(['7', '6', '5'], maxlen=3) 
deque(['8', '7', '6'], maxlen=3) 
+1

Die Verwendung der maximalen Länge ist hier eine bessere Lösung, eleganter, das heißt, das OP wollte das Element vorhängen, nicht anhängen - Sie wollen '' deque.appendleft() ''. Bearbeitet. –

1

Hier ist ein Einzeiler, aber es ist wahrscheinlich nicht so effizient wie einige der anderen ...

myList=["wuggah"] + myList[:-1] 

beachten Sie auch, dass es eine neue Liste erstellt, die möglicherweise nicht, was Sie wollen ...

1

Ein weiterer Ansatz

Verwandte Themen