从实用角度出发,根据数据挖掘中最长使用的语法和数据类型出发,对python进行学习,主要包含一下几个模块:数据类型、文件系统、函数、类和对象。学习了一段时间python之后,python相较于matlab最大的区别是编程思想和BIF。由原来的面向过程到现在的面向对象,python无处不对象,这句话体会会随着对python的了解而更加深刻。初学难免有疏漏或者错误,欢迎大家指正。

数据类型:
1. 列表:
 列表的创建方式:
   (1)创建并且初始化   number = [1,2,3]    mix = [1,2,"python",[6,7,8]]
   (2)创建一个空列表   number = []
 向列表中添加元素:
   (1)在列表的末尾添加:
     number.append(5)        直接添加一个数字元素
     number.append([6,5,4])  在后面添加一个列表元素,得到的结果是:[1,2,3,[6,5,4]]
     number.extend([6,5,4])  在后面对列表进行扩展,得到的结果是:[1,2,3,6,5,4]
   (2)在列表的具体位置插入元素:
     number.insert(0,9)      在第一个位置插入元素9,得到的结果是:[9,1,2,3]
 在列表中获取删除元素:
 获取元素:
   (1)和数组一样通过下标来获取相应的元素  number[2]   3
   (2)同时获取多个元素,列表分片          number[0:2]  访问0-1个元素,左闭右开
   (3)按照一定步长来跳跃访问元素          number[0:9:2]/number[::2] 访问元素步长为2
   (4)逆序访问,相当于列表反转            number[::-1]
 删除元素:
   (1)number.remove(1)   按照元素内容来删除,删除第一个元素1,只能删除一个
   (2)del number[1]      按照元素位置来删除,删除第二个元素。
 列表的BIF:
 ********************************************************************
 len(list)                     返回列表元素的个数
 del list                      删除这个列表
 list.count(obj)               返回obj在列表中出现的次数
 list.index(obj)               返回第一个obj在list中的位置
 list.index(obj,start,stop)   返回第一个obj在list的查找范围中的位置
 list.reverse()                返回列表的逆序列表
 list.sort()                   对列表从小到大排序
 *********************************************************************


2. 元组
 元组与列表最大的区别是列表可以内任意的修改,但是元组是不可变的
 对元组的更改只能通过切片再拼接的方法
 元组的本质在于:逗号,而不是小括号
 元组的BIF和列表是一致的(凡是改变元组的BIF除外,比如逆序,排序等等)


3. 字符串
 字符串也是不可更改的,更改的方法跟元组一样,必须采用切片拼接的方式
 字符串的BIF:
 *********************************************************************
 str.startswith(obj)         以obj开头
 str.endswith(obj)           以obj结尾
 str.find(obj,start,end)     查找是否有obj,有返回目标在整个数组中的下标,没有返回-1
 str.index(obj,start,end)    作用跟find一样,只是不存在的话会报错
 str.isalnum()               如果包含的全都是数字或者字母则返回true
 str.isalpha()               如果全是字母则返回true,否则返回false
 str.isdigit()               如果全是数字返回true,否则返回false
 str.islower()               字符串中至少包含一个字母,且所有字母全是小写返回true
 str.isupper()               字符串中至少包含一个字母,且所有字母全是大写返回true
 str.isspace()               如果字符串中只包含空格,返回true
 str.lower()                 将所有的大写字母转换成小写字母         
 str.lower()                 将所有的小写字母转换成大写字母 
 str.splitlines()            按照回车分割,返回一个列表
 str.join(str1)              用str作为分隔符,插入到所有的str1的所有字符中。
 str.split(sep = " ")        用sep去切分字符串str。默认是空格
 ********************************************************************
 format
 format()方法接受位置参数和关键字参数:
 >> "{0} love {1}!!!".format("I","you")
 'I love you!!!'
4. 序列
 列表,元组,字符串统称为序列,因为他们具有共同的特性:
   (1)都可以通过索引得到每一个元素。
   (2)默认索引值都是从零开始的
   (3)可以通过分片的方法得到一个范围内的元素的集合。
   (4)有很多共同的操作符(BIF)
 序列的BIF:
 ********************************************************************
 list(iterable)              将一个可迭代对象转化成list
 tuple(iterable)             将一个可迭代对象转化成tuple
 str(obj)                    将一个对象转化成str
 len(sub)                    返回sub参数的长度
 max(sub)                    返回序列的最大值元素
 min(sub)                    返回序列的最小值元素
 sorted(iterable)            和sort一样,但是返回的是一个列表,sort直接对原列表操作     
 reversed(iterable)          和reverse一样,但是返回的是一个迭代器对象,reverse直接对原列表操作 
 enumerate(iterable)         生成二元组构成的迭代对象
 zip(iterable1,iterable2)    打包成一个元组********************************************************************

5. 字典
 创建字典:
   (1)创建空字典            dict1 = {}
   (2)用dict来创建          dict1 = dict(tuple/list) 创建大型的字典通常使用这个方法,结合zip使用
   (3)映射关系的dict        dict1 = dict(F = 70,I = 80,A = 100),注意键值不能加引号
   (4)直接给字典的键赋值    dict1["x"] = 120 x存在则改变原来的值,不存在则创建新的键值,dict1存在
 字典的BIF:
 ********************************************************************
 dict.keys()                返回所有字典中的键
 dict.values()              返回所有的字典中的键值
 dict.items()               返回所有的字典的键和键值对
 dict.get(key)              返回键所对应的键值,如果没有不会报错返回none   
 dict.clear()               清空字典
 dict.copy()                复制一份字典返回
 ********************************************************************
6.集合
 在python中,用大括号括起来一组数字,没有体现任何的映射关系,构成的是一个集合
 创建集合:
   (1)直接通过大括号,把需要包含的元素包含进来
   (2)使用set(sub)
 访问集合:
   (1)set是无序的,所以不能通过下标来访问。
   (2)set可以通过in  not in 来访问
   (3)set.add(obj)可以给集合添加元素,set.remove(obj)可以删除元素  
 不可变集合:
 b = frozenset(a)     将a转化成一个不可变集合然后赋值给b,a依然可变


7. 矩阵(多维数组)numpy工具包中的数据结构
 这个是在实际应用中最重要的一种数据结构
 注意:python中的矩阵是按照行来操作的,跟matlab是不一样的
 (1)矩阵的创建:
   通常我们创建一个矩阵都会创建一个全0,或者全1的可以这样:
   arr = numpy.zeros((10,10,10))    
   arr = numpy.ones((10,10,10))     参数接收一个元组或者一个列表
   arr = random.random((2,3))       生成一个2行3列的数组,每个元素都是0-1之间的随机数
   如果直接创建一个确定数组:
   arr = numpy.array([2,3,4])
 (2)矩阵的BIF:
   *********************************************************************
   ndarray.shape             返回矩阵的维度,是一个元组
   ndarray.size              返回矩阵的元素的个数,等于shape各个维度的乘积
   ndarray.dtype             返回矩阵元素的数据类型
   ndarray.reshape(x,y)      返回矩阵reshape之后的矩阵
   ndarray.resize(x,y)       直接改变当前矩阵
   ndarray.sum(axis = 0)     默认是计算整个矩阵的和,axis = 0,按列计算,axis = 1,按行计算
   ndarray.min(axis = 0)     默认是计算整个矩阵的最小值,axis = 0,按列计算,axis = 1,按行计算
   ndarray.max(axis = 0)     默认是计算整个矩阵的最大值,axis = 0,按列计算,axis = 1,按行计算
   *********************************************************************
 (3)矩阵切片访问:
   在矩阵中有一个概念叫轴,每一行是一个轴,如果是一维列表,每个元素是一个轴。
   迭代是按照一个轴一个轴来进行的
   一维数组的切片操作等同于列表。
   多维数组中的...可以代表数组维度的补齐。比如:arr[1,...]代表arr的第一行

 (4)矩阵的拼接:
   numpy.vstack(a,b)        在垂直方向上拼接,要求列的维度一致(按照行拼接)
   numpy.hstack(a,b)        在水平方向上拼接,要行的维度一致(按照列拼接)
   这两个函数都是采用的深拷贝。

 (5)矩阵元素的查找:
   numpy.where(a==2),返回一个tuple,里面包括n(n是数组维度)个数组,每个数组是当前维度下标
   代码:
   idx = numpy.where(a == 2)
   idx_xy = zip(idx[0],idx[1])  
  
 (6)通用函数:
   numpy提供sin,cos,exp,tanh等通用函数
   numpy.sin(ndarray)
   numpy.cos(ndarray)
   numpy.exp(ndarray)
   numpy.tanh(ndarray)

 (7)打印数组:
   如果数组过大,python会自动打印边角的值,省略掉中间部分
   如果想要强制打印所有元素可以使用 np.set_printoptions(threshold = "nan") 设置打印边界

 (8)矩阵乘法:计算规则跟matlab正好相反
   按照元素乘法:
   A*B        对应元素相乘
   矩阵乘法:
   dot(A,B)   矩阵相乘