问题总结和疑问
我正在尝试查看对象内的一些数据,这些数据可以枚举但不能索引。我对 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__
是[]
语法所必需的。 -
__iter__
和__next__
迭代需要1。
任何类都可以定义一个类而不定义另一个类。如果效率低下,通常不定义 __getattr__
。
1 __next__
对于 __iter__
返回的类是必需的。
关于python - 对象是可枚举的但不可索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59525014/