Problemzusammenfassung und Frage
Ich versuche, einige der Daten in einem Objekt zu betrachten, die aufgelistet, aber nicht indiziert werden können. Ich bin noch neu in Python, aber ich verstehe nicht, wie das möglich ist.
Wenn Sie es aufzählen können, warum können Sie dann nicht auf die gleiche Weise wie beim Aufzählen auf den Index zugreifen? Und wenn nicht, gibt es eine Möglichkeit, einzeln auf die Artikel zuzugreifen?
Das eigentliche Beispiel
import tensorflow_datasets as tfds
train_validation_split = tfds.Split.TRAIN.subsplit([6, 4])
(train_data, validation_data), test_data = tfds.load(
name="imdb_reviews",
split=(train_validation_split, tfds.Split.TEST),
as_supervised=True)
Nehmen Sie eine ausgewählte Teilmenge des Datensatzes
foo = train_data.take(5)
Ich kannfoo
mit Aufzählung wiederholen :
[In] for i, x in enumerate(foo):
print(i)
welches die erwartete Ausgabe erzeugt:
0
1
2
3
4
Aber dann, wenn ich versuche, darin zu indizieren, foo[0]
erhalte ich diesen Fehler:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-44-2acbea6d9862> in <module>
----> 1 foo[0]
TypeError: 'TakeDataset' object does not support indexing
python
tensorflow
neural-network
kaggle
Phillip Geltman
quelle
quelle
Antworten:
Python erlaubt diese Dinge nur, wenn die Klasse Methoden für sie hat:
__getitem__
ist für die[]
Syntax erforderlich .__iter__
und 1 sind erforderlich, um zu iterieren.__next__
Jede Klasse kann eine definieren, ohne die andere zu definieren.
__getattr__
wird normalerweise nicht definiert, wenn es ineffizient wäre.__next__
Für die von zurückgegebene Klasse ist 1 erforderlich__iter__
.quelle
Dies ist ein Ergebnis der
foo
Iterierbarkeit, aber ohne__getitem__
Funktion. Sie können verwendenitertools.isslice
, um das n-te Element eines iterablen wie dieses zu erhaltenquelle
In Python können Instanzen von benutzerdefinierten Klassen die Aufzählung mithilfe einer speziellen (oder "dunder")
__iter__
Methode implementieren . Vielleicht implementiert diese Klasse__iter__
aber nicht__getitem__
.Dunder-Übersicht: https://dbader.org/blog/python-dunder-methods
Spezifikationen für eine
__iter__
Methode: https://docs.python.org/3/library/stdtypes.html#typeiterquelle