Python 中的 int object 可以在函数内部变成可迭代的吗?

Can an int object in Python become iterable inside a function?

我正在尝试遵循标题为 如何在 Python

中从头开始实施朴素贝叶斯的 blog post

从博客中可以看出,这是定义按 class 类型分隔数据库的函数的代码。

def separateByClass(dataset):
    separated = {}
    for i in range(len(dataset)):
        vector = dataset[i]
        if (vector[-1] not in separated):
            separated[vector[-1]] = []
        separated[vector[-1]].append(vector)
    return separated

但我无法理解 vector[-1] 是如何在 vectorint 类型 object 时的正确用法。如果我在函数外一个一个地尝试相同的命令,带有 vector[-1] 的代码行显然会抛出一个 TypeError: 'int' object has no attribute '__getitem__'。那么它在函数内部是如何工作的呢?

不,整数不会在函数或其他地方变成可迭代的。

但是,dataset 中的值不是整数。它们是列表;该文章在下一个片段中定义了数据集:

dataset = [[1,20,1], [2,21,0], [3,22,1]]

所以当遍历数据集时,每个 vector 都是这些列表中的一个(首先是 [1, 20, 1],然后是 [2, 21, 0],等等),最后一个是 vector[-1]每个列表中的值。

在示例中,dataset[i] 是一个列表列表:

dataset = [[1,20,1], [2,21,0], [3,22,1]]

这意味着,dataset[i]本身就是一个列表,例如:

dataset[0] = [1,20,1]

因此 dataset[0][-1] 将是 1dataset[0] 的最后一个元素。