我正在尝试查看对象内部的一些数据,这些数据可以枚举但不能建立索引。我仍然对python还是很陌生,但是我不知道这怎么可能。
如果可以枚举,为什么不能通过枚举相同的方式访问索引?如果没有,是否可以单独访问这些项目?
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)
选择数据集的一个选择子集
foo = train_data.take(5)
我可以用枚举遍历foo
:
[In] for i, x in enumerate(foo):
print(i)
将生成预期的输出:
0
1
2
3
4
但是,当我尝试索引到它foo[0]
时,出现此错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-44-2acbea6d9862> in <module>
----> 1 foo[0]
TypeError: 'TakeDataset' object does not support indexing
[Python仅在类具有用于它们的方法的情况下才允许它们:
__getitem__
对于__getitem__
语法是必需的。[]
和__iter__
。任何类都可以定义一个而不定义另一个。如果效率低下,通常__iter__
通常不会定义。
[在Python中,自定义类的实例可以通过特殊的(或“ dunder”)__next__
方法实现枚举。也许此类实现了__next__
,但没有实现__getattr__
。
Dunder概述:__iter__
__iter__
方法的规范:__getitem__
这是https://dbader.org/blog/python-dunder-methods可迭代但不具有__iter__
功能的结果。您可以像这样使用https://docs.python.org/3/library/stdtypes.html#typeiter获取可迭代的第n个元素
foo