Python 3.x 使用vs展开元组而不使用循环

Python 3.x 使用vs展开元组而不使用循环,python-3.x,scikit-learn,Python 3.x,Scikit Learn,我正在学习奥雷林·杰隆的《机器学习手册》中的一个练习 假设数据是一个数据帧: income_cat index 0 5.0 0 1 5.0 1 2 5.0 2 3 5.0 3 4 5.0 4 from sklearn.model_selection import StratifiedShuffleSplit split = StratifiedShuffleSpl

我正在学习奥雷林·杰隆的《机器学习手册》中的一个练习

假设
数据
是一个数据帧:

income_cat  index
0         5.0      0
1         5.0      1
2         5.0      2
3         5.0      3
4         5.0      4

from sklearn.model_selection import StratifiedShuffleSplit
split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
选项A(选自书本):

for test_indices, train_indices in split.split(data, data.income_cat):
    print(test_indices, train_indices)
选项B:

 test_indices, train_indices = split.split(data, data.income_cat)
 print(test_indices, train_indices)    
为什么选项B不起作用?这是一个python问题,而不是一个sklearn问题

一个元组应该在有循环和没有循环的情况下进行扩展,我会错过什么呢? 选项A和B之间的唯一区别是for循环

选项A的输出:

[4 2 1 0] [3]
选项B的输出:

ValueError: not enough values to unpack (expected 2, got 1)
返回一个列表,而不是一个列表。在引擎盖下的
for
循环中,生成器上称为
\uuuuuuuuuuuuuuuuuuuuuuuuu
方法,它返回序列的下一个元素(生成器最终生成)。此返回元素解压为两个变量:
test\u索引、train\u索引

通过使用助手函数
next()
显式调用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
可以获得相同的结果:

 test_indices, train_indices = next(split.split(data, data.income_cat))