Wie konvertiert man eine Liste in die Warteschlange? Damit können Operationen wie Enqueue oder Dequeue ausgeführt werden. Ich möchte zu der Liste verwenden, um die obersten Werte zu entfernen, und ich glaube, dass es mithilfe von Warteschlangen erfolgen kann.Ist es möglich, Liste in Python in die Warteschlange zu konvertieren?
Antwort
Sie können eine Liste als Warteschlange verwenden. Wenn Sie eine Fifo-Warteschlange wünschen, verwenden Sie einfach .append()
zum Hinzufügen und .pop(0)
zum Entfernen. Für eine Lifo-Warteschlange (d. H. Einen Stapel) verwenden Sie .append()
zum Hinzufügen und .pop()
zum Entfernen.
Sie sollten collections.deque verwenden, wenn Sie eine Fifo-Queue implementieren, die speziell für diesen Zweck entwickelt wurde. .pop(0)
ist eine O (n) -Operation. Eine Liste als Stapel zu verwenden ist in Ordnung.
FIFO Queue:
In [1]: q = range(15)
In [2]: q.pop(0)
Out[2]: 0
In [3]: q.pop(0)
Out[3]: 1
In [4]: q.pop(0)
Out[4]: 2
LIFO-Warteschlange:
In [5]: q = range(10)
In [6]: q.pop()
Out[6]: 9
In [7]: q.pop()
Out[7]: 8
In [8]: q.pop()
Out[8]: 7
nur pop()
>>> x = [1,2,3]
>>> x.pop(0)
1
>>> x
[2,3]
es langsam ist, muss jedes Element verschoben werden –
Pop von der Vorderseite einer Liste verwendet, ist nicht sehr effizient, da alle Referenzen in Die Liste muss aktualisiert werden.
deque ermöglicht es Ihnen, wie Operationen
>>> from collections import deque
>>> deque([1,2,3,4])
deque([1, 2, 3, 4])
Also könnte ich eine Liste in die Warteschlange machen, indem Sie a = Queue (list1) und dann eine für jede weitere Warteschlangenreferenz verwenden? – rggod
ja. deque wird mit einem iterablen, welches eine Liste ist, initialisiert und unterstützt meistens alle Operationen, die eine normale Liste hätte. Für eine vollständige Liste, siehe Link in der Antwort. – Cilyan
collections.deque effizient tun Warteschlange ist die Standard-Antwort, obwohl es nicht sehr gut abstrahiert wird.
Es gibt auch https://pypi.python.org/pypi/linked_list_mod/, wenn Sie bereit sind, ein wenig Geschwindigkeit für eine bessere Abstraktion zu opfern. collections.deque ist schneller. linked_list_mod lässt Sie ein iterable an den Konstruktor übergeben; die mitgelieferten lifo- und fifo-Module tun dies nicht, könnten aber auch dazu modifiziert werden.
Da ich eine Antwort auf diese Frage bei der Verwendung queue.Queue
suchte, dachte ich, ich sollte meine Erkenntnisse teilen. Es ist möglich, eine Liste unter Verwendung von queue.queue
in eine Warteschlange zu konvertieren.
import queue
l = [i for i in range(1000)]
q = queue.Queue()
[q.put(i) for i in l]
q2 = queue.Queue()
q2.queue = queue.deque(l)
Nachdem dieser Code ausgeführt wurde, q
und q2
sind zwei verschiedene Warteschlangen, die exakt die gleichen Einträge enthalten, aber mit der zweiten Methode ist> 300-mal schneller auf meinem Rechner.
Nicht verwandt mit der Frage, aber das Gegenteil kann von l = list(q.queue)
getan werden, wenn q
eine Instanz von queue.Queue
ist. Hoffe das erspart dir Ärger!
Dies wurde alles in Python 3.5.2 getestet.
- 1. Konvertieren einer Warteschlange in eine Liste
- 2. Ist es möglich, Enums zu Text in Posgresql zu konvertieren
- 3. Ist es möglich, die multiple Vergleichssyntax in Python zu überladen?
- 4. Umwandeln/Konvertieren Liste von Objekten in die Warteschlange von Objekten
- 5. Ist es möglich, eine Warteschlange für HashMap-Set zu erstellen?
- 6. Ist es möglich, CMakeLists.txt in Unix-Makefile zu konvertieren?
- 7. ist es möglich, FileOutputStream in Byte-Array zu konvertieren?
- 8. Ist es möglich, GroupCollection in List oder IEnumerable zu konvertieren?
- 9. Ist es möglich, timedelta in Stunden zu konvertieren?
- 10. Ist es möglich, PPC Assembly in C zu konvertieren?
- 11. Ist es möglich, 'else' in einem Python-Listenverständnis zu verwenden?
- 12. Ist es möglich, ein Modul in Python iterierbar zu machen?
- 13. ist es möglich, eine Liste in unserer App zu erstellen?
- 14. Ist es möglich, die Ausführung in Javascript/Jquery zu stoppen?
- 15. Ist es möglich, in Python mehrere Zuweisungen zu verwenden, um eine mehrdimensionale Liste zu transponieren?
- 16. Python in Java, ist es möglich
- 17. Ist es möglich, die Zeichencodierung zu "schnüffeln"?
- 18. Wie ist es möglich, in Python +5 zu bewerten?
- 19. ist es möglich, Python String-Interpolation in Ocaml zu reproduzieren?
- 20. Ist es möglich, Python-Funktionsargumente in Sphinx zu verstecken?
- 21. Ist es möglich, Python-Code-Vervollständigung in TextMate zu implementieren?
- 22. Ist es möglich, One-Liners in Python zu schreiben?
- 23. Ist es möglich, einen Buchstabenbereich in Python zu erstellen?
- 24. Ist es möglich, ein Python-Wörterbuch in AMQP zu legen?
- 25. Ist es möglich, in Python monatliche historische Aktienkurse zu erhalten?
- 26. Ist es möglich, ein in Python geschriebenes Programm zu kompilieren?
- 27. Ist es möglich, eine Firewall in Python zu schreiben?
- 28. Ist es möglich, Python-Code in Puppet-Dateien zu importieren?
- 29. ist es möglich, eine Zeichenfolge in Varbinary in PHP zu konvertieren, ohne die SQL-Funktion
- 30. Ist es möglich, die Smarty-Vorlage in HTML zu konvertieren, ohne sie auf die Seite auszugeben?
list_.pop (0) ist langsam für große Listen. – dstromberg
@dstromberg Ich glaube, es ist in meiner Antwort enthalten. – msvalkon