[PYTHON] Was ist ein Iterator?

Ziel

Verstehe irgendwie, wie der folgende Code funktioniert

for i in range(5):
    print(i)
# 0
# 1
# 2
# 3
# 4

Was ist ein Iterator?

Python für Anweisungen funktioniert für Iteratoren.

Ich glaube nicht, dass es zu dir kommen wird, selbst wenn du das sagst. Also werde ich erklären, warum Sie ein solches Konzept brauchen.

Versuchen Sie einmal, mit der while-Anweisung zu reproduzieren

Betrachten Sie das folgende Beispiel als Aussage.

l = ['Alpha', 'Beta', 'Charlie']

for name in l:
    print(name)

Jeder, der Python gelernt hat, weiß, was dies ausgeben wird?

Alpha
Beta
Charlie

Ja, es wird aus dem Array entfernt und der Name angezeigt. Wenn Sie dies mit while umschreiben, können Sie es so umschreiben.

l = ['Alpha', 'Beta', 'Charlie']
i = 0
while True:
    if i == len(l):
        break
    print(l[i])
    i += 1

Machen Sie dasselbe für Set

Die Ausgabe ist die gleiche. Ist die Python for-Anweisung eine Funktion, mit der solche Operationen auf verschiedenen Arrays einfach ausgeführt werden können? Betrachten Sie das folgende Beispiel. Diesmal ist dies ein Beispiel für die Verwendung des Set-Typs anstelle des Arrays. set ist ein Objekt, das eine Menge darstellt, und selbst wenn Sie dieselbe Nummer eingeben, wird es als eine gespeichert.

s = {1, 2, 2, 3, 1, 4}
↓
{1, 2, 3, 4}

Versuche, dieses Objekt wie zuvor zu bearbeiten.

s = {1, 2, 3, 4, 5}

i = 0
while True:
    if i == len(s):
        break
    print(s[i])
    i += 1

Wenn ich dieses Programm starte, erhalte ich eine Fehlermeldung und werde wütend.

Traceback (most recent call last):
  File "a.py", line 7, in <module>
    print(s[i])
TypeError: 'set' object is not subscriptable

Ich wundere mich warum? Dies liegt daran, dass Objekte wie Set- und Dict-Typen nicht wie ein Array in einer horizontalen Reihe angeordnet sind. Es wird durch eine Struktur dargestellt, die als Hash-Tabelle bezeichnet wird.

1200px-HASHTB08.svg.png (Bild aus Wikipedia)

Es gibt auch Datenstrukturen auf der Welt, die durch Bäume dargestellt werden. Dieses Mal ist es leicht zu verstehen. Nehmen wir dies als Beispiel. Binary_tree.png (Bild aus Wikipedia)

Auf diese Weise ausgedrückte Objekte werden nicht sofort genommen, selbst wenn Sie sie anweisen, "Holen Sie sich das fünfte!" Zu sagen. Sie müssen in der Reihenfolge von den ersten 2 in dieser Abbildung folgen. Daher ist der Zugriff per Index verboten. Stattdessen beantworten sie sofort Anweisungen wie "Suchen Sie nach dem, der hogehoge sagt!". Der Wörterbuchtyp ist ein Objekt, das solche Eigenschaften ausnutzt.

Wie reproduzieren Sie dasselbe Verhalten mit einer while-Anweisung? Das Folgende ist ein Beispiel.

s = {1, 2, 3, 4, 5}

while True:
    if s == set():
        break
    print(s.pop())

Ich werde den detaillierten Algorithmus weglassen, aber Sie können sehen, dass die Operation völlig anders ist als die Liste. Die for-Anweisung kann jedoch auch für diesen Set-Typ verwendet werden.

s = {1, 2, 3, 4, 5}

for num in s:
    print(num)

Ich wundere mich warum? Dies ist die Essenz von "Pythons for-Anweisung treibt einen Iterator an". Iteratoren werden in Liste und Menge implementiert. Und die for-Anweisung übergibt das Iteratorobjekt von list und set. Selbst wenn Sie wie folgt schreiben, funktioniert dies auf die gleiche Weise.

s = {1, 2, 3, 4, 5}

a = iter(s)
for num in a:
    print(num)

Bild der Iteratoroperation

Und \ _ \ _next \ _ \ _ () ist immer im Iteratorobjekt implementiert und gibt den Wert der Position neben dem aktuellen Iterator zurück.

Dies ergibt also immer noch die gleiche Ausgabe

s = {1, 2, 3, 4, 5}

a = iter(s)

print(next(a)) # __next__Anruf von außen
print(next(a))
print(next(a))
print(next(a))
print(next(a))

Dies ist unten dargestellt.

Ich denke, Sie haben irgendwie die Bequemlichkeit des Iterators gefunden. Der Iterator muss nur die folgenden Werte annehmen, damit Sie nicht alle Daten behalten müssen.

Verstehe das Ziel

Schauen Sie sich den folgenden Code an. Dies ist der Code, den ich zu diesem Zweck geschrieben habe

for i in range(5):
    print(i)
# 0
# 1
# 2
# 3
# 4

Sie können sich diesen Code auch wie folgt vorstellen:

a = [0, 1, 2, 3, 4]

for i in a:
    print(i)
# 0
# 1
# 2
# 3
# 4

Was wäre, wenn dies 10000 statt 5 wäre? Was wäre, wenn es 1000000 wäre? Wird eine Liste von 0 bis 999999 erstellt? falsch. Sie müssen nur eine Zahl vorbereiten und erhöhen.

Verlauf bearbeiten

2020-06-19 Der Quellcode, der next von Anfang an aufrief, wurde korrigiert, wie von shiracamus hervorgehoben. 2020-06-21 https://github.com/zerokpr wies darauf hin, dass der Fehler um die Datenstruktur von Set korrigiert wurde.

Recommended Posts

Was ist ein Iterator?
Was ist eine Instanzvariable?
Was ist ein Namespace?
Was ist copy.copy ()
Was ist dotenv?
Was ist Linux?
Was ist klass?
Was ist SALOME?
Was ist Linux?
Was ist Linux?
Was ist Pyvenv?
Was ist __call__?
Was ist Linux?
Was ist Python?
[Statistik für Programmierer] Was ist ein Ereignis?
Was ist ein Algorithmus? Einführung in den Suchalgorithmus] ~ Python ~
Was ist eine Distribution?
Was ist Piotroskis F-Score?
Was ist Raspberry Pi?
[Python] Was ist Pipeline ...
Was ist das Calmar-Verhältnis?
Was ist ein Terminal?
[PyTorch Tutorial ①] Was ist PyTorch?
Was ist ein Hacker?
Was ist JSON? .. [Hinweis]
Wofür ist Linux?
Was ist ein Zeiger?
Was ist Ensemble-Lernen?
Was ist TCP / IP?
Was ist Pythons __init__.py?
Was ist UNIT-V Linux?
[Python] Was ist virtualenv?
Was ist maschinelles Lernen?
Was ist der [Ruby / Python / Java / Swift / JS] -Algorithmus?
[Statistik] Verstehen Sie anhand von Animationen, wie die ROC-Kurve aussieht.
Was ist Mini Sam oder Mini Max?
Was ist eine logistische Regressionsanalyse?
Was ist die Aktivierungsfunktion?
Python ist eine Sprache für Erwachsene
Was ist ein Entscheidungsbaum?
Was ist ein Kontextwechsel?
Was ist Google Cloud Dataflow?
[DL] Was ist Gewichtsverlust?
[Python] Python und Sicherheit - is Was ist Python?
Was ist ein Superuser?
Wettbewerbsprogrammierung ist was (Bonus)
[Python] * args ** Was ist kwrgs?
Was ist ein Systemaufruf?
[Definition] Was ist ein Framework?
Was ist die Schnittstelle für ...
Was ist eine Rückruffunktion?
Was ist die Rückruffunktion?
Was ist Ihr "Tanimoto-Koeffizient"?
Python-Grundkurs (1 Was ist Python?)
[Python] Was ist eine Zip-Funktion?
[Python] Was ist eine with-Anweisung?
Was ist eine reduzierte Rangkammregression?
Was ist Azure Automation Update Management?