数值类型
Python的数值类型分为:int、long、float、bool、complex(复数)
其中要特别注意的是:
1.float类型是近似值,并不是精确值,浮点数可由计算机硬件的浮点运算单元直接运算,在运算性能上有优势。
2.复数是把一个数字分为实部和虚部两个部分,用数学式表示成a+bi
的形式,其中,a和b是实数,分别称为复数的实部和虚部,i是虚数单位,且满足i^2=-1。
complex(3,6) #表示 3+6j
当然我们也可以直接用
3+6j #代码同样正确
字符串类型
字符串一旦创建,元素不可改变。
Python没有字符这种类型,字符在Python中相当于“仅有一个字符的字符串”。
容器类型
Python的容器类型分为:list(列表)、set(集合)、dict(字典)、tuple(元组)
list(列表)
list(列表)可以放入任何类型的对象,因此可以视为Python语言最通用的序列。
创建列表的语法是使用方括号[]包住内含的对象1
2
3
4L0 = [1,2,3]
L1 = ['stock A','stock B','stock C']
print(L0[2]) #结果输出 3
print(L1[0]) #结果输出 stock A
当然列表可以放入任何类型的对象,包括列表本身:1
2
3
4L2 = [10, 'Price', ['Industry 1','Industry 2']]
print(L2) #结果输出 [10, 'Price', ['Industry 1','Industry 2']]
print(L2[2]) #结果输出 ['Industry 1', 'Industry 2']
print(L2[2][1]) #结果输出 Industry 2
tuple(元组)
tuple(元组)也是一种序列类型的数据,元组和列表都能储存任何类型的数据,但是列表中的数据是可变的(增删改),而元组一旦创建,就无法改变。
元组的创建通过圆括号()来实现1
2M = ('Market', 3.0, [10,20,30])
print(M) #输出('Market', 3.0, [10,20,30])
需要注意的是:在进行数据运算时,圆括号常常被用来改变运算顺序。因此,在创建只包含一个对象的元组时,为了避免歧义,Python规定在这个唯一的对象后面加一个逗号。1
2
3
4t1 = ('Single')
print(type(t1)) #输出<class 'str'> 表示字符串类型
t2 = ('Single',)
print(type(t2)) #输出<class 'tuple'> 表示元组类型
相比较于列表的内容能随意改变,元组不可变的特性,在开发大型软件时有便利之处,将不需要修改的数据改成元组,可以防止误写而使代码更安全。
dict(字典)
dict(字典)是一种“映射(Mapping)”的数据结构,与序列是截然不同的概念。列表、元组都是序列类型的数据结构,所谓序列指的是其中的对象从0开始依序编号,故有前后顺序的关系。
字典储存是“键:值”配对这样的映射关系,透过键便可以查找相对应的值。
创建字典使用大括号{}1
2d1 = {'Stock A':30, 'Stock B':40}
print(d1['Stock A']) #输出 30
set(集合)
之前提到的序列(例如列表和元组)与映射(如字典)是Python中用法迥异的两种容器类型。现在要介绍的集合(set)也是一种容器类型,但其既不是序列也不是映射,集合用来记录某些无顺序关系的不可变对象是否存在于其中。
需要注意的是:集合没有重复的元素。
创建集合的语法是以大括号包住集合元素,或将集合元素以列表的形式传入内置函数set()。1
2
3
4Winnners = {'Company A','Company B'}
print(type(Winnners)) #输出<class 'set'> 表示集合类型
Losers = set(['Company A','Company B'])
print(type(Losers)) #输出<class 'set'> 表示集合类型
需要注意的几点如下:
1.集合中的元素没有顺序关系,所以索引存取会报错。
2.空集合只能使用set()函数创建,不能用大括号,因为没包含任何元素的大括号{}表示的是一个空字典。
3.如果要利用字符串中的个别字符或列表中的元素来创建集合,同样必须使用set()函数而不能用大括号。
4.若以大括号包住字符串,Python仍会创建一个集合,只不过整个字符串会被当成一个单独的元素。
5.利用集合没有顺序关系与不能重复的特性,我们可以检查两个列表是否包含相同的元素。1
2
3
4
5L1 = [1,2,3]
L2 = [1,2,3]
a = set(L1)
b = set(L2)
print(a == b) #输出为True 表示两个集合相等
可变(Mutable)与不可变(Immutable)
最后写一点Python原理机制的东西。
在讨论可变与不可变之前,我们先来复习一下Python解释器对以下表达式的处理过程
x = 7
Python解释器先判断等号右面的7在内存中是否存在;如果不存在,Python会根据7的类型(整数)分配内存,并在此内存中创建数字7。
然后再看看变量x是否存在,若不存在,创建x,最后再将7赋值给x。
谨记上述过程后,我们再来看一个例子
y = 7
1 | x = 7 |
从上例看出,x与y同时指向了同一个内存地址1698027408(创建的时候内存随机),即存放整数7的地方。
其实对于Python来说,整数是不可变的对象,一旦在内存建立不可变对象后,其值就无法更动。变量的名称可以指向别的对象,但无法修改已创建的不可变对象的内容。
这样做的优点是,Python可以为不可变的对象分配固定内存,重用它,以减少重复的值对内存空间的占用。
可变类型: 列表,字典
不可变类型: 整数,浮点数,字符串,元组
本文部分整理转载自《量化投资:以Python为工具》蔡立耑 仅供学习研究之用,侵删。