系列文章目录
python基础①-基础环境搭建和工具使用
python基础②-常用的各种数据类型初认知
python基础③-数据类型常用的操作和方法字符串、数值、bool
python基础④-数据类型常用的操作和方法列表、元组、字典、集合
python基础⑤-控制流程
python基础⑥-函数
python基础⑦-字符编码与文件操作
python基础⑧-异常
python基础⑨-迭代器和生成器
python基础⑩-面向对象
python基础⑪-继承与派生
python基础⑫-多进程
python基础⑬-多线程
python基础⑭-进程池、线程池、协程
python基础⑮-网络编程socket
python基础⑯-网络编程socket进阶
文章目录
列表类型
#一:基本使用
# 1 用途:存放多个值,可以根据索引存取值
# 2 定义方式:在[]内用逗号分割开多个任意类型的值
# l=['dahai','lxx','yxx']
# l=list(['dahai','lxx','yxx'])
列表元素查取
1、按索引存取值(正向存取+反向存取):即可存也可以取
L = ['大王',1,1.2,[1,'小王']]
# 0 1 2 3
print(L)
# 索引从0开始 相当于我们书的页码
print(L[0])
print(L[1])
print(L[-1]) # 反向取
print(L[3]) # 正向取
L[0]='小明'
print(L)
2、切片(顾头不顾尾,步长)
# 查找列表当中的一段值 [起始值:终止值:步长]
# 和字符串提取字符一样,只不过字符串取的是字符,列表取的是一个数据类型/元素
# 但是字符串不能索引改值
print(L[0:3])
print(L[0:3:1])
# 默认步长为1
print(L[0:3:2])
3.len长度 列表元素的多少
print(len(L))
# 4.成员运算in和not in
print('小明' in L)
print('小明'not in L)
# 查看列表某个元素的个数 count
print(L.count('小明'))
# 在列表中从左至右查找指定元素,找到了放回该值的下标/索引
# index(查询元素,起始位置,结束位置) 不写默认全部
# 就相当于去酒店查房 多少号房
print(L.index('小明'))
# print(L.index('小明',2,3))
列表元素的修改
1、增加元素
# append(元素) 往列表末尾追加一个元素
L.append('小红')
print(L)
# 规律列表的修改和增加都不需要重新复制,直接改变了原值,所以是可变类型
# 字符串,数字,布尔,复数 都是一个值,改变需要重新赋值,都是不可变类型
L.append('小蓝')
print(L)
# insert(索引,元素) 往指定索引位置前插入一个元素
L.insert(0,'小美')
print(L)
# extend() 往列表当中添加多个元素 括号里放列表 也是末尾追加
L.extend(['小吴','小周'])
print(L)
2、删除元素
del L[0]
print(L)
# 指定删除。如果没有会报错
L.remove('小红')
print(L)
# pop # 从列表里面拿走一个值
name = L.pop()
print(name)
# # 按照索引删除值
# # 默认是删除最后一个
print(L)
res=L.pop(0)
print(L)
print(res)
# 清空列表clear
# L.clear()
# print(L)
3、修改元素
L[0]='小戴'
print(L)
4、排序(很重要)
# 反序
L.reverse()
print(L)
# sort 排序 对数字
list_num = [1,3,2,5]
# 不写默认是正序
# reverse=True参数是倒序
list_num.sort(reverse=True)
print(list_num)
# reverse=False参数是正序
list_num.sort(reverse=False)
print(list_num)
元组类型
#一:基本使用:tuple
# 1 用途:记录多个值,当多个值没有改的需求,此时用元组更合适
# 2 定义方式:在()内用逗号分隔开多个任意类型的值
t = (1,2,'小王',(2,2),[1,2,3])
print(t)
print(type(t))
print(t[0])
# 元组是不能通过索引改的
# t[0]=5 会报错
# print(t)
# 但是元组里面的列表是可以改的
t[4][0]=8
print(t)
# 元组是不能修改和添加所以元组是不可变类型
# 如果想修改可以转换成列表
t1=list(t)
t1[0]=8
t=tuple(t1)
print(t)
# 查
# 与列表一样索引,切片,长度len,count个数,index查找元素所在索引,成员运算
元组不可修改,元组里面如果是列表、字典、集合、对象。那么元素里面的元素可以修改
字典类型
定义
'''
#字典类型:dict
#作用:记录多个key:value值,优势是每一个值value都有其对应关系/映射关系key,而key对value有描述性的功能
#定义: 在{}内用逗号分隔开多个key:value元素,其中value可以是任意的数据类型,而key通常应该是字符串类型
'''
info = {'name':'小王','age':18}
# name 相当于新华字典里面的偏旁部首
print(info['name'])
print(info['age'])
生成方式
# 列表和字典的区别
# 列表是依靠索引
# 字典是依靠键值对 # key描述性的信息
# 注意字典的key必须是不可变类型,key无法提取
# 错误示范
# info1 = {[1,2,3]:'小红'}
# info1 = {(1,2,3):'小红'}
# print(info1[(1,2,3)])
# 生成字典的方式2
# dic=dict(x=1,y=2)
# print(dic)
1、增加元素
# 字典的增加操作
print(info)
# 直接赋值一个不存在的key和value
info['addr']='杭州'
print(info)
# 字典我在添加的时候也没有进行重新赋值,所以字典是可变类型
# 列表却不行,添加和修改必须是操作存在的索引
# 字典 len 查看的是键值对的个数
print(len(info))
# 成员运算in和not in:字典的成员运算判断的是key 返回值是布尔类型
print('name'in info)
print('小王'in info)
print('小王'not in info)
2、删除元素
# 删
# clear 清空字典
# info.clear()
# print(info)
# 通用 del
del info['name']
print(info)
# 不存在的key会报错
# del info['xxx']
# print(info)
# # pop 删除 返回值是value 实际上就是拿走了字典的value
res=info.pop('addr')
print(info)
print(res)
# # 不存在的key会报错
# # info.pop('xxx')
# # popitem 最后一对键值对删除 字典无序 返回的是一个元组
res1=info.popitem()
print(info)
print(res1)
删除一个不存在的key会报错
3、修改元素
# 改
print(info)
info['name']='小王'
print(info)
info.update({'name':'小王'})
print(info)
# setdefault
# 有则不动/返回原值,无则添加/返回新值
# 字典中已经存在key则不修改,返回已经存在的key对应的value
res=info.setdefault('name','xxx')
print(info)
print(res)
# 字典不存在key则添加"sex":"male",返回新的value
res2=info.setdefault('sex','male')
print(info)
print(res2)
4、查找元素(非常重要)
# 查
print(info['name'])
# 查一个不存在的key会报错
# print(info['xxx'])
print(info.get('name'))
# 没有key就返回None,不会报错
print(info.get('xxxx'))
# 取出所有的key
res1 = info.keys()
print(res1)
print(list(res1))
# 取出所有的值
res2=info.values()
print(res2)
print(list(res2))
# 取出所有的键值对
print(list(info))
res3=info.items()
print(res3)
print(list(res3))
如果元素不存在get不会报错 直接取会报错。建议无法判断是否存在则用get合适
集合类型
基本使用
#一:基本使用:set
# 1 用途: 关系运算
# 2 定义方式: 在{}内用逗号分开个的多个值
# 3. 1.元素不能重复(定义不能这样写相同的)
# 2.集合里面的元素是无序
# 3 每一个值都必须是不可变类型 # 强制类型转换set的时候必须也为不可变类型
s = {1,2,'小王'}
print(s)
s1 = {'a','b','c'}
s2 = {'a','c','d'}
print(s1 & s2) # # 拿2个集合相同的元素 shift + 7交集符合 交集
print(s1 | s2)# 拿2个集合所有的元素 并集
print(s1 - s2)# s1 去 抵消它们的交集 差集
增删改查
# 补充
# 3 每一个值都必须是不可变类型
# 错误示范
# sss = {'aa',1,{'name':'dahai'}}
# 增 add
s.add('小王')
print(s)
# 可变类型
# 删 pop 看你的pycharm是怎样无序排列的,从第一个元素删除
s.pop()
print(s)
# 指定删除remove
# s.remove('小王')
# print(s)
# 改
# update
s.update(['小美','小明'])
print(s)
每一个值都必须是不可变类型
错误示范
sss = {‘aa’,1,{‘name’:‘dahai’}}
集合去重
# 集合去重
# 局限性
#1、无法保证原数据类型的顺序
#2、当某一个数据中包含的多个值全部为不可变的类型时才能用集合去重
names =['dahai','xialuo','xishi','dahai','dahai','dahai']
s=set(names)
print(s)
l=list(s)
print(l)
info =[
{'name':'dahai','age':18},
{'name':'xialuo','age':78},
{'name':'xishi','age':8},
{'name':'dahai','age':18},
{'name':'dahai','age':18}
]
#setInfo= set(info)
#print(setInfo)
# 要用for循环和if判断去重就可以保证顺序和对可变类型去重
列表里面为不可变元素时不可转set
总结
字符串,数字,布尔,复数 都是一个值,改变需要重新赋值,都是不可变类型
容器元组是不可变类型,字典,列表,集合都是可变类型