2015-07-20 13 views
2

Я пытаюсь следовать по blog post под названием Как реализовать Наивный Байес с нулем в PythonМожет ли объект int в Python стать итерируемым внутри функции?

И из блог, это код для определения функции для разделения базы данных по типу класса.

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] является право использования при vector является объектом int типа. Если я пытаюсь использовать одни и те же команды за пределами функции, строка кода с vector[-1] явно бросает TypeError: 'int' object has no attribute '__getitem__'. Тогда как он работает внутри функции?

+3

Векторы, как правило, * кортежи * целых чисел, в зависимости от количества измерений. –

+0

Набор данных определяется прямо под кодом на связанном вами сайте: 'dataset = [[1,20,1], [2,21,0], [3,22,1]]'. Это не int – user3636636

ответ

6

Нет, целые числа не могут быть итерируемыми, в функциях или в другом месте.

Однако значения в datasetне являются целыми числами. Это списки; статья определяет набор данных в следующем фрагменте:

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

поэтому при итерации по набору данных, каждый из vector является одним из этих списков ([1, 20, 1], а затем [2, 21, 0] и т.д.) и vector[-1] это последнее значение в каждой из эти списки.

+0

Большое спасибо. Это была моя ошибка. Чтобы попробовать эту функцию, я создал набор данных как список целых чисел, а не список списков. Я получил это сейчас. Спасибо @ martijn-pieters и всем вам. –

3

В примере, dataset[i] список списков:

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

Это означает, что dataset[i] является сам список, например:

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

Так dataset[0][-1] будет 1, последний элемент dataset[0].

+0

Ты прав, исправил это. – adrianus

Смежные вопросы