J'essaie de regarder certaines des données à l'intérieur d'un objet qui peuvent être énumérées mais non indexées. Je suis encore novice en python, mais je ne comprends pas comment cela est possible.
Si vous pouvez l'énumérer, pourquoi ne pouvez-vous pas accéder à l'index de la même manière que l'énumérer? Et sinon, existe-t-il un moyen d'accéder aux éléments individuellement?
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)
Prendre un sous-ensemble sélectionné de l'ensemble de données
foo = train_data.take(5)
I peut itérer sur foo
avec énumérer:
[In] for i, x in enumerate(foo):
print(i)
qui génère la sortie attendue:
0
1
2
3
4
Mais alors, quand j'essaye de l'indexer foo[0]
J'obtiens cette erreur:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-44-2acbea6d9862> in <module>
----> 1 foo[0]
TypeError: 'TakeDataset' object does not support indexing
Ceci est dû au fait que foo
est itérable, mais ne possède pas de __getitem__
fonction. Vous pouvez utiliser itertools.isslice
pour obtenir le nième élément d'un itérable comme ça
import itertools
def nth(iterable, n, default=None):
"Returns the nth item or a default value"
return next(itertools.islice(iterable, n, None), default)
En Python, les instances de classes personnalisées peuvent implémenter l'énumération par le biais de spécial (ou "dunder") __iter__
méthode. Peut-être que cette classe implémente __iter__
mais non __getitem__
.
Présentation de Dunder: https://dbader.org/blog/python-dunder-methods
Spécifications pour un __iter__
méthode: https://docs.python.org/3/library/stdtypes.html#typeiter