Ringkasan masalah dan pertanyaan
Saya mencoba untuk melihat beberapa data di dalam objek yang dapat disebutkan tetapi tidak diindeks. Saya masih baru di python, tapi saya tidak mengerti bagaimana ini mungkin.
Jika Anda dapat menghitungnya, mengapa Anda tidak dapat mengakses indeks melalui cara penghitungan yang sama? Dan jika tidak, apakah ada cara untuk mengakses item secara individual?
Contoh yang sebenarnya
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)
Ambil subset tertentu dari dataset
foo = train_data.take(5)
Saya bisa beralih foo
dengan menghitung:
[In] for i, x in enumerate(foo):
print(i)
yang menghasilkan output yang diharapkan:
0
1
2
3
4
Tetapi kemudian, ketika saya mencoba untuk mengindeks ke dalamnya foo[0]
saya mendapatkan kesalahan ini:
---------------------------------------------------------------------------
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
sumber
sumber
Jawaban:
Python hanya mengizinkan hal-hal ini jika kelas memiliki metode untuk mereka:
__getitem__
diperlukan untuk[]
sintaks.__iter__
dan 1 diperlukan untuk beralih.__next__
Setiap kelas dapat mendefinisikan satu tanpa mendefinisikan yang lain.
__getattr__
biasanya tidak didefinisikan jika tidak efisien.1
__next__
diperlukan di kelas yang dikembalikan oleh__iter__
.sumber
Ini adalah hasil dari
foo
menjadi iterable, tetapi tidak memiliki__getitem__
fungsi. Anda dapat menggunakanitertools.isslice
untuk mendapatkan elemen ke-iterable seperti itusumber
Dalam Python, instance kelas kustom dapat menerapkan enumerasi melalui
__iter__
metode khusus (atau "dunder") . Mungkin kelas ini mengimplementasikan__iter__
tetapi tidak__getitem__
.Ikhtisar dunder: https://dbader.org/blog/python-dunder-methods
Spesifikasi untuk
__iter__
metode: https://docs.python.org/3/library/stdtypes.html#typeitersumber