Python 为什么用一对元组加载Keras MNIST如此重要?

Python 为什么用一对元组加载Keras MNIST如此重要?,python,keras,Python,Keras,在文档中,他们建议使用此行加载mnist: from keras.datasets import mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() 如果不使用元组或列表,则会引发错误: ValueError:没有足够的值来解包(预期值为4,实际值为2) 它也适用于列表。为什么使用元组或列表如此重要?使用sklearn,使用它不是问题 X_train, X_test, y_train, y_test = train_t

在文档中,他们建议使用此行加载
mnist

from keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
如果不使用元组或列表,则会引发错误:

ValueError:没有足够的值来解包(预期值为4,实际值为2)

它也适用于列表。为什么使用元组或列表如此重要?使用
sklearn
,使用它不是问题

X_train, X_test, y_train, y_test = train_test_split(X, y)
那么为什么它不能在这里工作呢?

如果你看一下这个函数,它只会精确地返回两个元组。因此,您需要两个元组或列表才能正确解包

但是如果您仔细看一下,它可以通过使用
itertools.chain
从可迭代项创建一个链来巧妙地实现这一点,它允许您使用四个元素进行解包

如果希望
keras.mnist.load_data()
以类似方式工作,请执行以下操作

from itertools import chain
x1, y1, x2, y2 = chain.from_iterable(tf.keras.datasets.mnist.load_data())
结果是一个两元组(由两个元组组成),因此对于解包,您需要在左侧正好有两个“接收器”。这些接收器也会立即打开包装,这可能有点令人困惑。