我正在尝试从一本使用Python的书中学习apriori机器学习算法,作为学习的一部分,我目前正面临以下问题:
以下代码构造似乎运行良好:
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,因为为了算法的目的,他们不希望它是可变的。我只是想照原样去做。
我在Anaconda (Spyder)上使用Python3.5.1。
请帮助我,因为我对Python和机器学习都很陌生。
谢谢你,马伊什。
发布于 2016-02-11 10:14:05
映射运算符不返回python3中可以重复迭代的列表,而是返回一次可迭代迭代器。在python3.x中,map的工作方式类似于python2.x中的itertools.imap。
要解决这个问题,请使用
Ck2=list(map(frozenset, Ck)))有关更多信息和其他解决方案,请参见Getting a map() to return a list in Python 3.x。
发布于 2016-02-11 10:27:10
在python2.x中,map函数返回一个列表。在python3.x map函数中,返回一个map对象,一个可迭代对象。确实是一个迭代器。当您运行一次内部for循环时,迭代器将结束,因此您无法再从它获得值。在python2.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)https://stackoverflow.com/questions/35336142
复制相似问题