一、pickle函数
python2.x中:fw=open(filename,'w')和fr=open(filename,'r'),
python3.x中:fw=open(filename,'wb')和fr=open(filename,'rb')。
二、dict.keys()
在python2.x中,dict.keys()返回一个列表,在python3.x中,dict.keys()返回一个dict_keys对象,比起列表,这个对象的行为更像是set,所以不支持索引的。
解决方案:list(dict.keys())[index]
三、字典中的.iteritems()函数
python2.x中为.iteritems(),
python3.x中为.items()。
四、range对象在python3.x中不能删除
python2.x中,st=range(0,50);del(st[4])能够运行
python3.x中,st=list(range(0,50));del(st[4])才能够运行
五、map函数在python3.x中不能直接使用了
python2.x中的map(float,[1,2,3])即把后面的list转换成float并返回list
python3.x中必须用list(map(float,[1,2,3]))来转换,否则转换结果是<map object at 0x028DBDD0>
六、numpy数组和矩阵向list转换
Python中库numpy中的array和mat向list转换都有转换函数.tolist(),直接调用即可。
七、set的构建
在python2.x中,可以直接用set(list)或者set(mat)或者set(array)来构建,但是
在python3.x中,不能使用这三种,因为这三种是可动态扩充的即提示“unhashable type: 'matrix'”,这个问题需要用tuple元组来解决,必须先把array或者matrix转换成元素,然后才能用set,组成set(tuple(array/list/mat))的形式。注意必须彻底转换,[[1,2,3][1,2,3]]这样的是不行的,只能进行一行或一列的转换[1,2,3]才行,[[1,2,3]]这样也不行,即必须只能有一个[]!!!
这个是我在看《机器学习实战》的时候遇到的,纠结了好长时间。
因为使用的Python3的缘故,所以使用《机器学习实战》里面的代码总是遇到各种问题,这次是第9章程序清单9-2回归树切分函数里的一行:
出现的错误是:
即matrix类型不能被hash。经过我各种试验,最终解决了这个问题,把代码改为如下即可:
八、sorted函数
在python2.x中,sorted函数有一个可选参数是cmp,可以指定比较函数,但是
在python3.x中,sorted函数去掉了这个cmp参数,那么如何补救呢?可以用key=functools.cmp_to_key(func)来代替。具体的排序可以参考:
http://www.cnblogs.com/65702708/archive/2010/09/14/1826362.html
九、在字典中遍历keys,并且同时删除
在python2.x中,如果a={},那么遍历可以用for item in a.keys() if.... delet(a[item])。如果用for item in a if.... delet(a[item])是会出错的
在python3.x中,第一中情况也会出错,需要L=list(a.keys()),然后for item in L if.... delet(a[item])