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,默认为Nonedict.items()
:返回一个元组组成的列表,每个元组包含了一个键值对dict.popitem()
:返回并删除字典中的最后一个键值对dict.clear()
:删除字典内所有元素dict.copy()
:返回字典的浅拷贝
- 直接赋值(=):赋值引用,指向同一个对象
- 浅拷贝(copy):拷贝父对象,不会拷贝对象内部的子对象,因此两个字典子对象的值是同一个对象
1
2 dict1={'a':[1,2,3,4],'b':2} # dict1['a']的值是一个子对象,dict1['b']的值是一个父对象
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)
:判断两个集合是否包含相同的元素,没有则返回Trueset.issubset(set1)
:判断集合set的所有元素是否都包含在集合set1中,是则返回Trueset.issupersubset(set1)
:判断集合set1的所有元素是否都包含在集合set中,是则返回Trueset.copy()
:用于复制一个集合