一、列表
列表:相当于其他语言中的数组
1.列表的创建
语法结构:
·使用中括号:列表对象名=[‘a’,‘b’,‘c’]
·调用内置函数list():列表对象名=list([‘a’,‘b’,‘c’])
2.列表的特点
·列表元素按顺序有序排序
·索引映射唯一一个数据
·可以重复储存数据
·任意数据类型混存
·根据需要动态分布和回收内存
3.列表的查询操作
·获取列表中指定元素的索引
index():
·只返回相同元素的第一个元素的索引
·查询元素不存在,输出:ValueError
·在指定的索引范围内进行查找(包括起始索引,不包括终止索引)
eg:
a=['hello','world','python','hello']
print(a.index('hello'))
print(a.index('hello',1,4))
运行结果:
·获取列表中的单个元素:list[]
·正向索引:0到n-1
`逆向索引:-n到1
·指定索引不存在:IndexError
·获取列表中的多个元素—切片操作
语法格式:列表名列表名[start:stop:step]
·切片结果:原列表片段的拷贝,产生一个新的列表对象
·切片范围:[start,stop)
·step默认为1:列表名[start:stop]
·step为正数—从start开始往后计算切片
·step为负数—从start开始往前计算切片
·判断指定元素在列表中是否存在
语法格式:元素 in 列表名;元素 not in 列表名
返回值:true,false
·列表元素的遍历
for 迭代变量 in 列表名
eg:
a=['a','b','c']
for i in a
print(i)
4.列表元素的增加、删除、修改、排序
·增加操作
方法 | 操作结果 | 语法结构 |
---|---|---|
append() | 在列表的末尾添加一个元素 | 列表对象名.append(所添加元素) |
extend() | 在列表的末尾至少添加一个元素 | 列表对象名.extend(所添加多个元素组成的列表) |
insert() | 在列表的任意位置添加一个元素(原索引位置处的元素向后移位) | 列表对象名.insert(索引,所添加元素) |
切片 | 在列表的任意位置添加至少一个元素(索引位置后的所有元素被切片中的元素替代,并不再出现) | / |
eg:
a=['hello','world','python','hello']
b=[1,2,3]
a[2:]=b
print(a)
运行结果:
·删除操作
方法 | 操作结果 | 语法结构 |
---|---|---|
remove() | 一次删除一个元素;重复元素只删除一个;元素不存在输出ValueError | remove(元素) |
pop() | 删除一个指定索引位置上的元素;不指定索引删除列表中的最后一个元素;指定索引不存在输出IndexError | pop(索引);pop() |
clear() | 清空列表 | 列表对象名.clear() |
del | 删除列表 | del l列表对象名 |
切片 | 1.一次至少删除一个元素,并产生一个新的列表对象;2.不产生新的列表对象,只删除列表中的内容 | 1.新列表对象名=列表对象名[start:stop];2.列表对象名[start:stop]=[] |
eg:
lst=[1,2,3,4,5]
lst[1:3]=[]
print(lst)
print(lst[2])
运行结果:
·修改操作
①为指定索引元素赋值
语法结构:列表对象名[索引]=所要赋的新值
②为指定切片赋值
语法结构:列表对象名[start:stop]=[新元素1,新元素2,…,新元素n]
eg:
lst=[1,2,3,4,5]
lst[1:3]=[222,333,444,555,666,777,888]
print(lst)
运行结果:
·排序操作
①sort()
升序排序:列表中所有元素按照从小到大进行排序
降序排序:sort(reverse=True)
语法结构:
lst=[1,9,3,4,2,8]
lst.sort()
print(lst)
lst.sort(reverse=True)
print(lst)
②sorted()
语法结构和使用方法与sort()相同,区别在于sorted()不改变原列表,产生一个新列表
5.列表生成式(生成列表的公式)
语法格式:列表对象名=[表示列表元素的表达式 for 自定义变量 in 可迭代对象]
(注意:“表示列表元素的表达式”中通常包含自定义变量)
eg:
a=[i*i for i in range(1,10)]
print(a)
运行结果:
二、字典
字典:
python内置的数据结构之一,于列表一样是可变序列(可以进行增删改操作);以键值对的方式存储数据;字典是一个无序的序列(其存储顺序是依据哈希函数计算得出的);其实现功能类似结构体
语法结构:字典名={键:值,键:值,…,}
1.字典的实现原理
字典的实现原理与查字典类似,Python是根据key查找value所在的位置(提高查找效率)
2.字典的创建
①使用花括号:字典名={键:值,键:值,…,}
②使用dict函数:dict(name=‘Jack’,age=10)
③创建空字典:字典名={}
3.字典元素的获取
①[]:字典名[key]
(如果字典中不存在指定的key,输出KeyError)
②get():字典名.get(key)
(如果字典中不存在指定的key,输出None)
4.字典的增删改操作
·key的判断
语法结构:键 in 字典名;键 not in 字典名
返回值:True;False
·删除操作
删除指定key:语法结构:del 字典名[key]
清空字典:字典名.clear()
·增加、修改操作
字典名[key]=值(原本有key—修改;原本无key—新增)
5.获取字典视图
keys():获取字典中所有key
values():获取字典中所有value
list(keys/values):将所有key/values组成的视图转成列表
items():获取字典中所有键值对
语法结构:
a={'aa':100,'bb':90,'cc':80}
#获取所有的key
k=a.keys()
print(k)
print(type(k))
print(list(k))
#获取所有value
v=a.values()
print(v)
print(type(v))
print(list(v))
#获取所有键值对
i=a.items()
print(i)
print(type(i))
print(list(i))
6.字典元素的遍历
语法结构:
a={'aa':100,'bb':90,'cc':80}
for i in a:
print(i)#获取键
print(a[i])#获取值
print(a.get(i))#获取值
7.字典的特点
·字典中的所有元素都是键值对,键不允许重复,值可以
·字典中的元素是无序的
·字典中的key必须是不可变对象(整数,字符串)
·可以根据需要动态分配内存
·字典会浪费较大的内存,是一种使用空间换时间的数据结构(查找速度快但是浪费内存)
8.字典生成式
·zip()函数:用于将可迭代的对象作为参数,将对象中对应元素打包成一个元组,然后返回由这些元组组成的列表
语法结构:
字典名={key:value for key,value in zip(key,value)}
a=['aa','bb','cc']
b=[10,20,30]
c={a:b for a,b in zip(a,b)}
print(c)
四、元组
元组:Python内置的数据结构之一,是一个不可变序列
语法结构:元组对象名=(元素对象1,元素对象2,…)
·不可变序列与可变序列
不可变序列(字符串,元组):
没有增删改的操作,更改后对象地址更改
可变序列(列表,字典):
有增删改操作,更改后对象地址不发生更改
1.元组的创建方式
·直接小括号:元组对象名=(元素对象1,元素对象2,…)
·内置函数tuple():元组对象名=tuple(元素对象1,元素对象2,…)
·只包含一个元素的元组需要使用小括号+逗号:元组对象名=(元素对象1,)
2.为什么要将元组设计成不可变序列
·多任务环境下,同时操作对象时不需要加锁
·在程序中应尽量使用不可变序列
注意事项:
①元组中储存的是对象的引用
②如果元组中对象本身是不可变对象,则不能引用其他对象
③如果元组中的对象是可变对象,则可变对象的引用不允许改变,但是数据可以改变
错误操作:
a=(10,[20,30],40)
a[1]=[666,777]#元组是不允许修改元素的
print(a)
运行结果:
正确操作:
a=(10,[20,30],40)
a[1].append(666)
print(a)
运行结果:
3.元组的遍历
元组是可迭代对象,可以使用for…in遍历
语法结构:for i in 元组对象名:
四、集合
集合:Python内置的数据结构之一,是可变序列,集合是没有value的字典(储存key的机制与字典相同)
1.集合的创建方式
·直接使用{}:集合对象名={元素1,元素2,…}
·内置函数set():
使用方法:
a=set(range(5))
print(a)
print(set([3,4,4,5]))#列表转集合
print(set((3,4,4,5)))#元组转集合
print(set('python'))#字符串转集合
#定义空集合
b=set()
运行结果:
注意:集合和字典中的key均不允许重复
2.集合的相关操作
·判断操作
in 或 not in
·增加操作
add():一次添加一个元素
update():至少添加一个元素
语法格式:集合对象名.add(新增元素);集合对象名.update({元素1,元素2,…})
·删除操作
remove():一次删除一个指定元素,元素不存在输出异常:集合对象名.remove(要移除的元素)
discared():一次删除一个指定元素,元素不存在不会输出异常:语法格式同上
pop():一次只删除一个任意元素:语法格式同上
clear():清空集合:集合对象名.clear()
3.集合间的关系
·两个集合是否相等(==or!=)
·只判断内容不判断顺序
·返回值:true/false
·一个集合是否是另一个集合的子集(issubset)
·一个集合是否是另一个集合的超集(issuperset)
·两个集合有无交集(isdisjoint)
eg:
a1={1,2,3,4,5}
a2={1,2,3}
a3={1,2,9}
print(a2.issubset(a1))
print(a3.issubset(a1))
·返回值:true/false
4.集合的数据操作
①交集:intersection()、&
②并集:union()、|
③差集:difference()、-
④对称差集:symmetric_difference()、^
eg:
a1={1,2,3,4,5}
a2={1,2,3}
print(a1.intersection(a2))
print(a1&a2)
运行结果:
5.集合生成式
语法格式:集合对象名={i*i for i in range(1,10)}
注意:集合中生成元素的顺序非字典序