从实用角度出发,根据数据挖掘中最长使用的语法和数据类型出发,对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) 矩阵相乘