Verwendung von "deque" für Python-Daten

Einführung

In der D-Frage von "At Coder Beginner Contest 158", die neulich stattfand, wurde eine gute Frage gestellt, wenn deque verwendet wird, daher möchte ich zusammenfassen, wie man es in Python verwendet.

D - String Formation https://atcoder.jp/contests/abc158/tasks/abc158_d

Was ist deque

Ein Typ des Python-Container-Datentyps. Daten können auf Kosten von O (1) sowohl für den Anfang als auch für das Ende hinzugefügt werden. Wenn es sich um eine normale Liste handelt, kann sie auf Kosten von O (n) implementiert werden, wenn sie am Anfang hinzugefügt wird.

Dies ist nützlich, wenn Sie Daten nicht nur am Ende, sondern auch am Anfang hinzufügen möchten.

Methodeneinführung

Fügen Sie dem Endanhang Daten hinzu

Verwenden Sie die Methode "Anhängen" wie eine Liste.

Fügen Sie dem Anfang des Anhangs Daten hinzu

Verwenden Sie die Methode "Links anhängen". List verwendet die Methode "insert".

Beispielcode 1

from collections import deque

d = deque('a')
d.append('b')
d.appendleft('c')

print(d)
# -> deque(['c', 'a', 'b'])

print(''.join(d))
# -> cab

Flache Kopie Kopie

Machen Sie eine flache Kopie der Deque. Siehe unten für flache Kopien.

Kopieren --- Flache Kopier- und Tiefkopiervorgänge https://docs.python.org/ja/3/library/copy.html

Beispielcode 2

from collections import deque

d1 = deque([1, 2, 3, 4, 5])
d2 = d1.copy()

print(d1)
# -> deque([1, 2, 3, 4, 5])
print(d2)
# -> deque([1, 2, 3, 4, 5])

d1.append(6)

print(d1)
# -> deque([1, 2, 3, 4, 5, 6])
print(d2)
# -> deque([1, 2, 3, 4, 5])

Zählelemente zählen

Zählen Sie die Anzahl der Werte, die den Argumenten in deque entsprechen.

Elementpositionsindex

Gibt die Position eines Werts zurück, der dem Argument in deque entspricht. Wenn nicht gefunden, lösen Sie einen ValueError aus.

Elemente extrahieren pop pop left

Löscht das Element rechts von pop: deque und gibt es zurück. Löscht das Element auf der linken Seite von popleft: deque und gibt es zurück.

Element entfernen entfernen

Entfernen Sie den ersten Wert, der dem Argument in deque entspricht. Wenn nicht gefunden, lösen Sie einen ValueError aus.

Elementumkehrung umgekehrt

Kehren Sie die Reihenfolge der Elemente in deque um.

Beispielcode 3

from collections import deque

d = deque([1, 2, 3, 4, 5])

d.insert(2, 5)
print(d)
# -> deque([1, 2, 5, 3, 4, 5])

print(d.count(5))
# -> 2

print(d.index(2))
# -> 1
print(d.index(5))
# -> 2
print(d.index(5, 4, 6))
# -> 5

print(d.pop())
# -> 5
print(d)
# -> deque([1, 2, 5, 3, 4])
print(d.popleft())
# -> 1
print(d)
# -> deque([2, 5, 3, 4])
d.remove(5)
print(d)
# -> deque([2, 3, 4])

d.reverse()
print(d)
# -> deque([4, 3, 2])

Hinzufügen iterierbarer Elemente erweitern

Fügen Sie rechts ein interaktives Element hinzu.

Fügen Sie links links ein iterierbares Element hinzu

Fügen Sie links ein interaktives Element hinzu.

Schaltelemente drehen sich

Verschiebt das Element um den Wert des Arguments nach rechts. Elemente jenseits des Endes bewegen sich zum Anfang. Wenn Sie eine negative Zahl angeben, wird diese nach links verschoben.

Beispielcode 4

from collections import deque

d = deque([1, 2, 3, 4, 5])

li = [6,7,8,9]
d.extend(li)
print(d)
# -> deque([1, 2, 3, 4, 5, 6, 7, 8, 9])

d.extendleft(li)
print(d)
# -> deque([9, 8, 7, 6, 1, 2, 3, 4, 5, 6, 7, 8, 9])

d.rotate(1)
print(d)
# -> deque([9, 9, 8, 7, 6, 1, 2, 3, 4, 5, 6, 7, 8])

d.rotate(-1)
print(d)
# -> deque([9, 8, 7, 6, 1, 2, 3, 4, 5, 6, 7, 8, 9])

d.clear()
print(d)
# -> deque([])

Maximale Längenangabe maxlen

Geben Sie die maximale Anzahl von Deque-Elementen an. Wenn Sie mehr als die maximale Anzahl von Elementen hinzufügen, wird das Element auf der gegenüberliegenden Seite gelöscht.

Beispielcode 5

from collections import deque

li = [1, 2, 3, 4, 5]
d = deque(li, 3)
print(d)
# ->deque([3, 4, 5], maxlen=3)

d2 = deque([], 3)
for i in range(10):
    d2.append(i)
print(d2)
# -> deque([7, 8, 9], maxlen=3)

Listen- und Leistungsvergleich

(Ich mache es mit dem Gefühl, es zu versuchen) Die Leistung wurde verglichen, indem einfach der Wert rechts addiert wurde, wenn er gerade war, und links, wenn er 1.000.000 Mal ungerade war. Die Liste war ungefähr 147 Sekunden und die Deque war ungefähr 0,3 Sekunden.

from collections import deque
import time

start = time.time()
li = []
for i in range(1000000):
    if i % 2 == 0:
        li.append(i)
    else:
        li.insert(0, i)
elapsed_time = time.time() - start
print(elapsed_time)
# -> 147.49888038635254


start = time.time()
d = deque([])
for i in range(1000000):
    if i % 2 == 0:
        d.append(i)
    else:
        d.appendleft(i)
elapsed_time = time.time() - start
print(elapsed_time)
# -> 0.3092050552368164

Impressionen

Ich kannte die Deque im Wettbewerb nicht, also habe ich eine Liste mit der doppelten maximalen Anzahl von Elementen erstellt und das erste Element in der Mitte hinzugefügt, um damit umzugehen. Ich denke, es wäre einfacher zu lösen, wenn ich deque kennen würde, also wollte ich die Datenstruktur gut lernen.

Selbst wenn ich den Rechenaufwand verstehe, dachte ich, dass es keinen Unterschied geben würde, wenn man die Verarbeitungszeiten tatsächlich vergleicht.

Referenz

Sammlungen --- Container-Datentyp https://docs.python.org/ja/3/library/collections.html#collections.deque

Datentyp collection.deque, der in Python als "Warteschlange für beide Enden" verwendet werden kann https://kakakakakku.hatenablog.com/entry/2019/01/04/214907

[Python] Misst und zeigt die für die Verarbeitung erforderliche Zeit an https://qiita.com/fantm21/items/3dc7fbf4e935311488bc

Recommended Posts

Verwendung von "deque" für Python-Daten
[Python] Organisieren der Verwendung für Anweisungen
python3: Verwendung der Flasche (2)
[Python] Verwendung von Liste 1
Wie benutzt man Python Argparse?
Verwendung von Datenanalysetools für Anfänger
Python: Wie man pydub benutzt
[Python] Verwendung von input ()
Wie benutzt man Python Lambda?
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
Verwendung von Python-Bytes
[BigQuery] Verwendung der BigQuery-API für die Python-Tabellenerstellung-
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
[Python] Wie man MP3-Daten fFT
Python: So verwenden Sie Async mit
[Python] Verwendung der Pandas-Serie
Verwendung von Anfragen (Python Library)
Verwendung von SQLite in Python
[Python] Verwendung von Liste 3 Hinzugefügt
Wie man MySQL mit Python benutzt
Verwendung der Python-API von OpenPose
Verwendung von ChemSpider in Python
Python: Verwendung von pydub (Wiedergabe)
Verwendung von PubChem mit Python
Verwendung der Zip-Funktion von Python
[Python] Verwendung der Typetalk-API
[Python] Verwendung von Matplotlib, einer Bibliothek zum Zeichnen von Diagrammen
Wie nutzt man maschinelles Lernen für die Arbeit? 03_Python-Codierungsverfahren
Ich wusste nicht, wie ich die [Python] für die Anweisung verwenden sollte
[Einführung in Python] Wie verwende ich eine Klasse in Python?
So installieren und verwenden Sie pandas_datareader [Python]
[Python] Verwendung von __command__, Funktionserklärung
Memorandum über die Verwendung von Gremlin Python
[Python2.7] Zusammenfassung der Verwendung von unittest
Python: Verwendung von Einheimischen () und Globalen ()
Verwendung von __slots__ in der Python-Klasse
Verwendung von Python zip und Aufzählung
[Python] Verstehen, wie rekursive Funktionen verwendet werden
Zusammenfassung der Verwendung der Python-Liste
Verwendung regulärer Ausdrücke in Python
[Python2.7] Zusammenfassung der Verwendung des Unterprozesses
Verwendung der Fingerabdruckauthentifizierung für KDE
Verwendung ist und == in Python
[Frage] Wie verwende ich plot_surface von Python?
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
Verwendung eines externen Editors für die Python-Entwicklung mit Grasshopper
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data
Verwendung von virtualenv
Verwendung von Image-Match
Wie man Shogun benutzt
So installieren Sie Python
Verwendung von Pandas 2
Verwendung von Virtualenv
Verwendung von numpy.vectorize