对象是可枚举但不可索引的吗?

问题描述 投票:5回答:3

问题摘要和问题

我正在尝试查看对象内部的一些数据,这些数据可以枚举但不能建立索引。我仍然对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 tensorflow kaggle
3个回答
1
投票

[Python仅在类具有用于它们的方法的情况下才允许它们:

任何类都可以定义一个而不定义另一个。如果效率低下,通常__iter__通常不会定义。


0
投票

[在Python中,自定义类的实例可以通过特殊的(或“ dunder”)__next__方法实现枚举。也许此类实现了__next__,但没有实现__getattr__

Dunder概述:__iter____iter__方法的规范:__getitem__


0
投票

这是https://dbader.org/blog/python-dunder-methods可迭代但不具有__iter__功能的结果。您可以像这样使用https://docs.python.org/3/library/stdtypes.html#typeiter获取可迭代的第n个元素

foo
© www.soinside.com 2019 - 2024. All rights reserved.