性质 | 操作 | 列表 | 元组 | 字典 | 集合 |
有序 | 偏量索引/切片 | √ | √ | 键索引 | |
可变 | 增/删/改 | √ | √ | √ | |
异构/嵌套 | 不同对象集合 | √ | √ | √ | √ |
不重复 | 唯一 | √ | √ | ||
可迭代 | 遍历 | √ | √ | √ | √ |
目录
可变:改变数据本身,内存地址不变。
不可变:改变数据内存地址会变。int/float/str/tuple
列表list
列表有序,可变,支持增删改查。
列表之间可以+拼接
列表可以转换成元祖,集合;若列表中只有2个值,也能转成字典。
a=[1,2,3,4,5,6]
b=(123,'456')
c={123: 456,'爸爸的爸爸':'爷爷'}
d={15,45}
e=[34,'hh']
f=[57,86]
#a+e #两个列表拼接
#len(a) #求列表长度
#a*5 #列表重复5次
#10 in a #>>>False,10不在列表中,所以是假。判断列表中是否存在某元素
#tuple(a)
#set(a)
#dict([b,d,e]) #b,d,e转成字典的键值对,两个元素的列表,元祖,集合可以直接转换成字典。
#a.append(False) #末位增加一个元素,元素任意,可以是数字,字符串,布尔值,列表,元祖,集合,
#a.extend(e) #末位拓展,需接一个可迭代对象,可以是:字符串,列表,元祖,集合,字典(键依次并入列表,值舍弃),对象中的元素被遍历进入列表,不保留原有的列表,元祖,集合等格式
#a.extend(b) #元祖
#a.extend(c) #字典
# a.extend(d) #集合
#a.extend(e+f) #两个列表相加,并入列表
#a.extend('abcde') #可迭代对象(iterable),可以被遍历的对象,list,str,tuple,dict,set
#a.insert(1,True) #插入(位置,一个元素),元素任意
#aa=a.copy() #复制列表
#a.count(4) #某个元素计出现次数
#a.index(4) #第一个4的位置 ,仅查询,不可赋值
#a[1] #位置查找值,也可用于赋值
#a.clear() #清空列表
#a.pop() #末位删除 a.pop(4) 删除位置为4的元素
#a.remove(1) #删除列表中某个特定元素
#a.remove(a[1])
#del a #删除整个列表
#a.reverse() #倒序
#a.sort(reverse=True) #排序,默认从小到大,reverse=True从大到小
a
元组 tuple
与列表类似,但是其中元素不支持修改
可以通过位置查询元素,通过元素查位置,某个元素计数
元组可以转化成列表或集合
两个元组可以加号拼接
a=(1,3,4,5,5)
b=[123,456]
#c=(1) #创建一个元素的元组,必须加个逗号,不然会被当成运算符里的括号,无法创建元组
#c=() #创建空元祖
# a.count(5) #计数5出现了几次
# a.index(4) #定位元素4的位置
# a[2] #通过位置索引数据
#a[:2] #可像列表一样切片
#a[2]=1 #元祖不支持修改,所以这个代码是跑不动的。元组不支持增删改,要么整个元祖删掉。。
#del a #把整个元组删掉
#len(a) #求元组长度
# a+a #两个元组组合
# a+b #元组不能和其他类型的数据等相加
#a*4 #重复
#3 in a #判断元祖中是否存在某元素
# list(a) #将元组转化为列表
# set(a) #将元组转化为集合
#疑问,搞那么多数据类型干啥?
字典 dict
由键值对key-value组成,键不能重复,值可以。
字典中元素是无序的。
字典的元素支持增删改查
与列表相比,字典是无序的;查找、插入极快,不会随键值增加而减慢,但是需要占用内存较多,空间换时间。
列表是有序的;占用空间小,浪费内存小,但是元素增加,查找和插入都更耗时。
#a={} 创建空字典
a={1:'hah',2:'hehe','3':123,'name':'pig'}
b={4:665,5:'aaa',6:False}
# a['3'] #只能通过键查找值,因为是无序的,无法像列表一样用数字定位
# a[1] ##a.fromkeys([1,2,3,4]) #以列表中的元素为键,构建一个值为none的字典
#a.fromkeys([1,2,3,4],123) #前面同上,所有键对应的值都是123这里的1是键,而不是数字位置。
#a.get('name') #用键查找值
#a.keys() #表的形式返回所有键
#a.values() #列表的形式返回所有值
#type(a.items()) #将键值对变成一个个小元祖,组成列表的形式返回。 这功能有啥用????
#a['age']=100 #增加键值对
#a['name']='悟能' #更新name的值
#a.setdefault(4,666) #增加键值对,如键已存在则更新值
#a.update({4:665,5:'aaa',6:False}) #增加多个键值对 两个字典不能直接用+拼接,所以需要这种方式
#a.pop(1) #删除2和其对应的值,括号中必须给出一个key,给两个也只删除第一个
#a.popitem() #python3中,删除最后入的一个键值对 ;其他的版本貌似是随机弹出
# len(a) #字典中有多少个键值对
# '3'in a #字典中是否存在某个键,值不能直接判断
#list(a) #这三个方法也可以得到字典所有的键
#set(a) #返回键的集合
#tuple(a) #返回键元组
集合
一组无序,不重复的元素的集合
支持增删查
主要用于去重,或者求交集,并集等
# a=set() #创建空集
a={1,2,3,4,5}
b={1,2,5,7,8,9,10}
c=[1,2,3,1,2,3,4,5]
#a&b #求交集,与a.intersection(b)相同
# a|b #求并集,即 a.union(b)
# a-b #差集 ,即a.difference(b)
# a^b #对称差集,即a.symmetric_difference(b)
#list(set(c)) #用于列表,元祖去重
# a.add('1') #增加一个hashable(不可变?)的对象,比如数字,字符串,元组
# a.update({1:'hah',2:'hehe','3':123,'name':'pig'},[123,456],{123,456},(444,555,34,789))
# a.update('are you ok?')
# 接一个或多个可迭代对象,对象中的元素被遍历去重进入集合中
# 与列表的extend函数相比,这个可以接多个对象,extend只能一个
#a.remove(3) # 删除一个特定值
#a.discard(4) #删除一个特定值
# a.pop() #随机移除一个值,观察貌似是弹出的集合中第一个值
#del a #删除整个集合
len(a)
3 in a
[数据类型和深浅拷贝](https://www.cnblogs.com/WQ577098649/p/11529244.html)