在看apriori的算法,决定自己练练手,写写代码。最近又在学python,所以准备用python实现。其中一个子过程是要求候选项Ck的k项子集。在这个求子集的方法中遇到了问题了,并且很神奇。最开始一直找不到问题所在,当单步调试发现问题所在之处时却倍感神奇。下面用代码示例来说明下这个问题的神奇之处。
# coding=UTF-8 |
j += 1 |
本例中是求集合[[‘1’],[‘2’],[‘3’]]的2-itemset子集。 看如上代码中,红色那句先注释掉,用a=a+b的形式,运行结果如下。这个结果是正确的,为{1,3}、{2,3}、{1,2}。
若将代码中换成a+=b的形式,即去掉蓝色代码部分,换成红色的代码。意料中,应该结果一样。但实际结果却出乎意料。
不但子集没求对,就连原始的集合elements都被改变了。看了好久搞不定是哪里出了问题了。之前对a+=b和a=a+b的印象仅仅停留在涉及一个强制类型转换的原因,难道这个也是吗?搞不懂,像高人求助……
p.s顺便求一个代码高亮的插件,既能良好展示代码,又能自定义代码的某句的格式,比如本页中的的那两句有颜色代码,自定义格式了就不能用之前用的插件了。用那个插件,就又不能自定义格式了。本人用codecolorer,既想保持有良好的代码格式体现,又想能用于本页中,自己加font这样的标签,用于提到哪句代码更方便。现在本页是用了两段codecolorer的inline格式,加自定义font color属性的两句代码,给拼起来的,实在麻烦。