Python提供了大量的内置数据结构,包括列表,集合以及字典等,本文主要记录这些基本数据类型的使用。
Python中的标准数据类型主要有:
- 数值(Number)
- 字符串(String)
- 列表(List)
- 元组(Tuple)
- 字典(Dict)
- 集合(Set)
- 其他(Others):Byte,Boolean,None
Note:在Python中,类型是属于对象的,变量只是一个对象的引用,没有类型。例如
| 1 | a=[1,2,3,4] | 
其中,[1,2,3,4]是List类型,变量a没有类型,它只是一个指向List类型对象的引用。
在Python中,String, Tuples和Number是不可变对象,而List,Dict和Set是可变对象
- 不可变对象:变量b重新赋值实际上是生成一个新的对象,再让b指向新对象,原来对象被丢弃,不是改变b的值
- 可变对象:变量a指向的对象的元素被修改,a没有改变
1. 数值
Python支持三种不同类型的数值类型
- 整型(int)1 
 2a=10 
 b=0x10 # 16
- 浮点型(float)1 
 2
 3a=1.2 
 b=.5 # 0.5
 c=.314e1 # 3.14
- 复数(complex)1 
 2a=1+2j 
 b=complex(1,2) # 1+2j
1.1 数据类型转换
| 1 | ''' | 
1.2 算数运算
- 加,减,乘,除,求余:+,-,*,/,%
- 幂运算:**
- 取整除,即取商的整数部分://
- 数学函数:abs(),ceil(),exp(),floor(),max(),min(),log(),pow(),sqrt()等
- 三角函数:sin(),cos(),tan(),radians(),degrees()等
- 数学常量:pi,e
Note:关于比较运算
==和is:
==是比较两个对象的内容是否相等,默认调用对象的__eq()__方法
is比较的是两个对象的id是否相等,即是否是同一个对象,也就是是否指向同一个内存地址
2. 字符串
字符串是Python中最常用的数据类型,可以使用引号('或")来进行创建。Python可以使用三引号创建字符串,该字符串可以跨行,可以包含换行符、制表符以及其他特殊字符。
| 1 | str1 = 'string1' | 
2.1 字符串运算符
- +:字符串拼接
- *:重复输出字符串,如- str1*2输出结果为- string1string1
- []:通过索引获取字符串中的字符
- [:]:截取字符串中的一部分,遵循左闭右开原则
- in和- not in:成员运算符,字符串中是否包含给定字符
- r/R:原始字符串,不进行转义等操作
- %:字符串格式化
2.2 字符串格式化
- C风格字符串格式化
- 字符串格式化函数:str.format()1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13# C-style 
 print("My name is %s, % years old" % ('String',100))
 # str.format()
 "{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
 "{0} {1}".format("hello", "world") # 设置指定位置
 "姓名:{name}, 年龄: {age}".format(name="string", age="100)
 # 通过列表设置参数
 my_list = ['string','male']
 "姓名:{0[0]}, 性别: {0[1]}".format(my_list)
2.3 数据类型转换
| 1 | int('1') # 1 | 
3. 列表
列表是Python中最基本的数据结构,列表中的数据项可以具有不同的类型。列表的基本形式为一个方括号,其中的元素通过,进行分隔。
| 1 | list = [1,2,3,4,5] | 
3.1 列表操作符
- +:列表组合
- *:重复
- []:通过索引获取列表中的元素,并可以进行修改
- [:]:截取列表中的一部分元素,遵循左闭右开原则
- [::]:列表切片,除了起始索引和结束索引,还有步长,步长为负,反向索引
- in和- not in:成员运算符,列表中是否包含给定元素
- len(list):列表元素个数
- max(list)和- min(list):返回列表元素最大/最小值
- list(tuple):将元组转换为列表
列表推导表达式:
[表达式 for 变量 in 列表 [if 条件]]
3.2 列表包含的方法
- list.append(obj):在列表末尾添加新的元素
- list.insert(idx,obj):在列表特定位置插入新的元素
- list.extended(seq):在列表末尾添加另一个序列的值
- list.pop(idx=-1):移除列表中特定位置的元素(默认是最后一个元素),并且返回该元素
- list.remove(obj):移除列表中某个值的第一个匹配项
- list.clear():移除列表中所有值- del list[idx]可以删除列表指定位置或者指定范围内的值,也可以删除整个列表。与- pop()不同之处在于,- del不会返回删除的值。
- list.count(obj):统计某个值在列表中出现的次数
- list.index(obj):索引某个值在列表中第一次出现的位置
- list.sort(key=None,reverse=False):对原列表进行排序
- list.reverse():反向原列表中的元素
- list.copy():复制列表
4. 元组
Python中的元组与列表类似,不同之处在于:
- 元组的元素不能修改
- 元组使用小括号,列表使用中括号Note:元组中包含一个元素时,需要在元素后面添加 ,,否则括号会被当做运算符使用
元组的操作符
元组的操作符与列表的操作符大致相同,不同之处在于:
- []:通过索引获取列表中的元素,但是不可以对元素进行修改
- tuple(list):将列表转换为元组
5. 字典
字典是另一种可变容器类型,可以存储任意类型的对象。字典的基本格式为一个花括号,字典的键和值对用:进行分割,每个对之间用,分割。
| 1 | dict={key1:val1,key2:val2} | 
字典具有以下特性:
- 字典中的键是唯一的,值可以重复
- 字典中的键必须是不可变的,因此可以是字符串、数字或者元组,不能是列表,值可以取任何数据类型
- 字典中的键值必须要同时进行初始化
5.1 字典的操作符
- [key]:通过键来访问字典中的值,并可以进行修改和删除(- del dict[key])
- in和- not in:成员运算符,字典中是否包含给定的键
- len(dict):返回字典中元素的个数
- str(dict):以可以打印的字符串形式输出字典
- type(var):返回输入变量的类型
字典推导表达式:
[key:value for 变量 in 迭代器 [if 条件]]
5.2 字典的函数
- dict.keys()和- dict.values():返回的是一个迭代器,可以通过- list()转换为列表
- dict.get(key,default=None):获取指定键的值,没有值返回defaule值
- dict.setdefault(key,default=None):获取指定键的值,如果键不存在,添加键并将其值设为default值
- dict.pop(key[,default=None]):删除指定键的值,并返回该值。key必须给出,否则返回default值
- dict.update(dict2):将字典dict2的键值对更新到dict中
- dict.fromkeys(seq[,value]):创建一个新的字典,以序列中的元素作为字典的键,并将值初始化为value,默认为None
- dict.items():返回一个元组组成的列表,每个元组包含了一个键值对
- dict.popitem():返回并删除字典中的最后一个键值对
- dict.clear():删除字典内所有元素
- dict.copy():返回字典的浅拷贝
- 直接赋值(=):赋值引用,指向同一个对象
- 浅拷贝(copy):拷贝父对象,不会拷贝对象内部的子对象,因此两个字典子对象的值是同一个对象
2
dict2=dict1.copy() # dict2['a']的值和dict1['a']的值指向的是同一个对象- 深拷贝(deepcopy):完全拷贝了父对象及子对象,需要
import copy
6. 集合
集合是一个无序的不重复元素序列,可以使用{}和set()函数来创建集合,创建格式:
| 1 | set1 = {val1,val2,...} | 
Note:创建一个空的集合只能使用
set(),因为{}是用来创建一个空的字典的语法描述。
6.1 集合的操作符
- &,- |,- -,- ^:集合的交集,并集,差集和对称差集
- ==,- !=:判断集合是否相等
- >=,- <=:包含和被包含
- len(set):返回集合中元素的个数
- in:判断元素是否在集合中- Note:因为集合是无序的,所以不能进行索引操作 
6.2 集合的函数
- set.add(obj):为集合添加元素,若添加的元素已经存在,则不进行任何操作
- set.update(obj):为集合添加元素或集合到当先集合中
- set.remove(obj):移除指定的元素,元素不存在时会发生错误
- set.discard(obj):移除指定的元素,元素不存在也不会发生错误
- set.pop():随机移除一个元素,并返回移除的元素
- set.clear():移除集合中所有元素
- set.intersection(set1,set2,...,etc):计算两个或者多个集合的交集,并返回新的集合
- set.intersection_update(set1,set2,...,etc):计算两个或者多个集合的交集,并在原始集合上移除不同的元素
- set.union(set1,set2,...,etc):计算两个或多个集合的并集,并返回新的集合
- set.difference(set1):计算包含在set中但是不包含在set1中的元素,并返回新的集合
- set.difference_update(set1):计算包含在set中但是不包含在set1中的元素,并在set上移除相同的元素
- set.symmetric_difference(set1):计算两个集合中所有不重复的元素,并返回新的集合
- set.symmetric_difference_update(set1):移除当前集合中所有相同的元素,并将另一个集合中不同的元素插入到当前集合
- set.isdisjoint(set1):判断两个集合是否包含相同的元素,没有则返回True
- set.issubset(set1):判断集合set的所有元素是否都包含在集合set1中,是则返回True
- set.issupersubset(set1):判断集合set1的所有元素是否都包含在集合set中,是则返回True
- set.copy():用于复制一个集合