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))