和列表相似,本质上是一种有序的集合
元组和列表的不同之处:
a.列表:[] 元组:()
b.列表中的元素可以进行增加和删除操作,但是,元组中的元素不能修改【元素:一旦被初始化,将不能发生改变】
创建列表:
创建空列表:list1 = []
创建有元素的列表:list1 = [元素1,元素2,。。。。。]
创建元组
创建空元组:tuple1 = ()
创建有的元组:tuple1 = (元素1,元素2,。。。。)
#1.定义元组
tuple1 = ()
print(tuple1,type(tuple1))
?
tuple2 = (2,4,45)
print(tuple2)
?
#注意1:和列表类似,元组是有序的,其中可以存储重复元组,可以存储不同类型的数据
tuple3 = (2,4,45,2,2,2,"abc",False)
print(tuple3)
?
#注意2:如果元组中只有一个元素,则需要在元素的后面添加逗号,为了消除歧义
list1 = [10]
print(list1,type(list1))
#tuple4 = (10) #tuple4 = 10
tuple4 = (10,)
print(tuple4,type(tuple4))
?
#2.元组元素的访问
tuple1 = (2,4,45,2,2,2,"abc",False)
#a.获取,和列表相同,元组中元素的获取通过索引操作的
print(tuple1[1])
?
#b.注意3:元组属于不可变的数据类型,一旦被定义之后,将不能修改元素
#tuple1[1] = 66 #TypeError: ‘tuple‘ object does not support支持 item项目 assignment赋值
?
#3.元组操作
#元组组合,元组元素的重复,判断元组是否存在,切片和列表的用法完全相同
?
#4.系统功能
t1 = (34,5,4,65,7,4,4)
print(len(t1))
print(max(t1))
print(min(t1))
?
print(t1.index(4))
print(t1.count(4))
?
#元组和列表之间实现相互转换
#list(元组) ---》将元组转化为列表
#tuple(列表) ----》将列表转换为元组
t1 = (34,5,4,65,7,4,4)
print(type(t1))
r1 = list(t1)
print(type(r1))
#5.遍历元组
t1 = (34,5,4,65,7,4,4)
?
for num in t1:
print(num)
?
for i in range(len(t1)):
print(t1[i])
?
#enumerate(x)将x容器转化为枚举【容器】,其中存储的是索引和数据的一 一对应的关系
for i,num in enumerate(t1):
print(i,num)
?
#6.使用场景
"""
如果数据不能改变,则使用元组,比如表示星期,月份,颜色等
如果数据需要随时发生概念,则使用列表,在实际开发中,使用列表较多
"""
列表和元组的使用缺点:当存储的数据要动态添加、删除的时候,我们一般使用列表,但是列表有时会遇到一些麻烦
# 定义一个列表保存,姓名、性别、职业
nameList = [‘尼古拉斯.赵四‘, ‘男‘, ‘铁憨憨‘];
?
# 当修改职业的时候,需要记忆元素的下标
nameList[2] = ‘演员‘
?
# 如果列表的顺序发生了变化,添加年龄
nameList = [‘尼古拉斯.赵四‘, 18, ‘男‘, ‘铁匠‘]
?
# 此时就需要记忆新的下标,才能完成名字的修改
nameList[3] = ‘xiaoxiaoWang‘解决方案:既能存储多个数据,还能在访问元素的很方便的定位到需要的元素,采用字典
语法:{键1:值1, 键2:值2, 键3:值3, ..., 键n:值n}
说明:
字典和列表类似,都可以用来存储多个数据
在列表中查找某个元素时,是根据下标进行的;字典中找某个元素时,是根据‘名字‘(就是冒号:前面的那个值,例如上面代码中的‘name‘、‘id‘、‘sex‘)
字典中的每个元素都由2部分组成,键:值。例如 ‘name‘:‘班长‘ ,‘name‘为键,‘班长‘为值
键可以使用数字、布尔值、元组,字符串等不可变数据类型,但是一般习惯使用字符串,切记不能使用列表等可变数据类型
每个字典里的key都是唯一的,如果出现了多个相同的key,后面的value会覆盖之前的value
习惯使用场景:
列表更适合保存相似数据,比如多个商品、多个姓名、多个时间
字典更适合保存不同数据,比如一个商品的不同信息、一个人的不同信息
#语法:字典名 = {key1:value1,key2:value2.....}
#1.创建空字典
dict1 = {}
print(dict1,type(dict1))#2.创建非空字典
#方式一
dict21 = {"name":"张三","age":18}
print(dict21)#方式二
#dict(key=value),key是一个变量名,value是一个值
dict22 = dict(a="avvv",b="2353")
print(dict22)
dict22 = dict(a=200,b=33)
print(dict22)#方式三
#dict()和zip(序列),zip表示映射
#dict(zip([key1,key2,key3....],[value1,value2,value3....]))
#注意:key的数量和value的数量可以不一致,以少的作为参考
z1 = zip([1,2],["a","b","c"])
dict23 = dict(z1)
print(dict23)dict23 = dict(zip(("name","age"),("aaa",10)))
print(dict23)dict23 = dict(zip("xyz","abc"))
print(dict23)#方式四
#[(key1,value1),(key2,value2)...]---{key1:value1,key2:value2....}
dict24 = dict([("a",10),("b",20),("c",30)])
print(dict24)
#1.获取
dict1 = {"zhangsan":50,"lisi":99,"jack":100}
?
#a.#语法:字典名[key],获取指定key对应的value
score1 = dict1["lisi"]
print(score1)
print(dict1["jack"])
?
#注意:通过字典名[key]访问字典元素的时候,key必须存在
#print(dict1["tom"]) #KeyError: ‘tom‘
?
#b.get(key):通过get访问字典元素,如果key不存在,会返回空值None
print(dict1.get("lisi"))
print(dict1.get("tom"))
?
print("=" * 30)
?
#2.修改
#语法:字典名[key] = 值
print(dict1.get("lisi"))
dict1["lisi"] = 77
print(dict1.get("lisi"))
print(dict1)
?
print("=" * 30)
?
#3.添加
print(dict1)
print(dict1.get("bob"))
dict1["bob"] = 78
print(dict1)
?
?
"""
结论:
a.字典属于可变数据类型
b.通过 字典名[key] = 值 操作字典,如果key存在则表示修改,如果key不存在则表示添加键值对
c.字典是无序的,后期collections模块中OrderedDict专门用来生成有序字典
"""
#1.增
dict1 = {"zhangsan":50,"lisi":99,"jack":100,"bob":66}
print(dict1)
#方式一:
dict1["aaa"] = 10
?
#方式二:update(),更新,合并字典
#注意:dict1.update(dict2),将dict2合并到dict1
dict2 = {"zhangsan":20}
dict1.update(dict2)
?
#+:可以使用与:数字 + 数字,str + str,list + list ,tuple + tuple
print([1,2,3] + [5,6])
#print(dict1 + dict2) #TypeError: unsupported operand type(s) for +: ‘dict‘ and ‘dict‘
?
?
#方式三:setdefault(key,default),如果default定义,则添加一对键值对,
# 如果省略default,则添加的键值对为:key:None
dict1 = {"zhangsan":50,"lisi":99,"jack":100,"bob":66}
print(dict1)
?
dict1.setdefault("111")
print(dict1)
?
dict1.setdefault("222",44)
print(dict1)
?
#get(key,default),如果key存在,则返回对应的value
#如果key不存在,如果省略default,则返回None,但是如果未省略default,则返回default
print(dict1.get("zhangsan"))
print(dict1.get("zhangsan",33))
?
print(dict1.get("abc"))
print(dict1.get("abc",33))
?
#2.删
#方式一:pop(key):根据指定的key删除键值对,返回值为被删除的key对应的value
dict1 = {"zhangsan":50,"lisi":99,"jack":100,"bob":66}
print(dict1)
?
result = dict1.pop("lisi")
print(dict1)
print(result)
?
#方式二:del
del dict1["bob"]
print(dict1)
?
#方式三:clear(),清空
dict1.clear()
print(dict1) #{}
?
#del dict1
?
?
#3.改
dict1 = {"zhangsan":50,"lisi":99,"jack":100,"bob":66}
dict1["jack"] = 100
?
?
#4.查
dict1 = {"zhangsan":50,"lisi":99,"jack":100,"bob":66}
#a.len():获取字典中键值对的对数
print(len(dict1))