Python - 在for循环中使用冻结集条目列表的问题

use*_*648 5 python set python-3.x frozenset

我正在尝试从使用Python的书中学习apriori机器学习算法,作为该学习的一部分,我目前仍然遇到以下问题:

以下代码构造似乎工作正常:

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

但是,以下不起作用:

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

当我将原始迭代的每个元素映射到冻结集时,我注意到内部循环("对于Ck2中的候选者")仅执行一次.之后它永远不会执行.上面没有冻结集的代码正确地循环内循环10次.但是,使用frozenset映射,我可以让内循环只执行一次.

请帮我解决这个问题.本书已将可迭代值映射到frozenset,因为它们不希望它对于算法的目的是可变的.我只是想按原样跟随它.

我在Anaconda(Spyder)上使用Python 3.5.1.

请帮助,因为我不熟悉Python和机器学习.

谢谢和问候,Mahesh.

jof*_*fel 5

map操作符不返回python3中的列表,您可以重复迭代,但是一次性迭代迭代器.在python3.x中,map类似于itertools.imappython2.x.

要解决此问题,请使用

 Ck2=list(map(frozenset, Ck)))
Run Code Online (Sandbox Code Playgroud)

并参阅获取map()以返回Python 3.x中的列表以获取更多信息和其他解决方案.