2016-02-11 5 views
5

Я пытаюсь изучить алгоритм машинного обучения apriori из книги, в которой используется Python, и как часть этого обучения я в настоящее время придерживаюсь этой следующей проблемы:Python - проблема с использованием списка записей frozenset в цикле for

следующая конструкция кода, кажется, работает хорошо:

Ck = [[1], [2], [3], [4], [5]] 
    for tranid in range(10): 
     for candidate in Ck: 
      print("Printing candidate value: ", candidate) 

Однако следующий не работает:

Ck = [[1], [2], [3], [4], [5]] 
Ck2 = map(frozenset, Ck) 
    for tranid in range(10): 
     for candidate in Ck2: 
      print("Printing candidate value: ", candidate) 

Когда я карта каждый элемент моего первоначального ИТЭР я могу заметить, что внутренний цикл («для кандидата в Ck2») выполняется только один раз. После этого он никогда не выполняется. Приведенный выше код без фенизометра должным образом проходит через внутренний контур 10 раз. Тем не менее, с отображением frozenset, я могу заставить внутренний цикл выполнить только один раз.

Пожалуйста, помогите мне с фиксацией этого. Книга отображает итерируемые значения в frozenset, потому что они не хотят, чтобы она была изменчивой для целей алгоритма. Я просто пытаюсь следовать за ним, как есть.

Я использую Python 3.5.1 на Anaconda (Spyder).

Пожалуйста, помогите, поскольку я новичок в Python и Machine Learning.

С уважением, Mahesh.

ответ

5

Оператор map не возвращает список в python3, который вы можете повторять повторяющийся, но одноразовый итератор. В python3.x, map работает подобно itertools.imap в python2.x.

Чтобы решить эту проблему, используйте

Ck2=list(map(frozenset, Ck))) 

и посмотреть Getting a map() to return a list in Python 3.x для получения дополнительной информации и других решений.

+0

Ого, что работал. Большое спасибо :) – user3755648

0

В функции python2.x, map функция возвращает список. В python3.x map функция возвращает объект карты, итерируемый объект. Действительно, итератор. Когда вы запускаете внутренний цикл for один раз, итератор заканчивается, поэтому вы больше не сможете получить его. В python 2.x вы можете получать значения из списка много раз.

Вы должны пересмотреть его:

Ck = [[1], [2], [3], [4], [5]] 
for tranid in range(10): 
    Ck2 = map(frozenset, Ck) 
    for candidate in Ck2: 
     print("Printing candidate value: ", candidate) 

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

  • Нет связанных вопросов^_^