知识点5-字典,元组集合
age2 = 20
age3 = 30
age4 = 40
....
[10,20,30,40,50]
1 字典:
1.1 概述:字典是以key-value(键值对)的形式来存储数据的
查找速度快
key的特点:
key 1:key是唯一的
2:key需要是不可变类型
3:注意 key是无序的
4 可变类型:列表,字典
5 不可变类型:如 数字,字符串
1.2 格式:{key1:value,key2:value,...}
1.3 描述:字典的key与value是以冒号:连接,
key与value组成字典的一个元素,
元素与元素之间用逗号,连接
字典使用{}包裹
1.4创建
1.4.1 创建一个空的字典
dict1 = {}
print(dict1)
print(type(dict1)
1.4.2 创建与i个有多个值的字典
dict2 = {"name1":"小灰灰","name2":"刘德华","name3":"吴彦祖","name4":"三胖胖"}
print(dict2)
其中key不能重复,只会保留一个key对应的值,且保留的是后面出现的那个
dict2 = {"name1":"小灰灰","name1":"刘德华","name3":"吴彦祖","name4":"三胖胖"}
注意:字典的key需要不可变的类型
dict2 = {"name1":"小灰灰","[1,2,3]":"刘德华","name3":"吴彦祖","name4":"三胖胖"}
字典是无序的
print(dict2)
1.5 增删改查
1.5.1
查
注意:字典是无序的,不可以用索引来获取值
name = dict2[2]
1.5.2
方式一:字典通过key值来获取值value
格式:字典名[key]
name = dict2["name4"]
注意:当key不存在时,会抛出异常,使程序挂掉
name = dict2["age"]
方式二:使用get方式获取值,
当key不存在时,不会抛出异常,返回None
参数2 用来设置默认值,当key不存在时,就返回该默认值
name = dict2.get("age")
name = dict2.get("gender",男)
print(name)
1.5.2 增加
dict3 = {"name1":"小灰灰","[1,2,3]":"刘德华","name3":"吴彦祖","name4":"三胖胖"}
添加
dict3["name5"] = "李小璐"
修改
dict3["name2"] = "文章"
print(dict3)
注意:
格式: 字典名[key] = 值
注意:如果key值已经存在,则表示的是修改的key对应的value的值
如果key值不存在,则表示是向该字典中添加一个新的键值对
1.5.3 删除
根据key来删除一个值,会返回删除的值
如果key不存在,且没有设置default(默认,缺省)值,会抛出异常
如果设置,则返回默认值
name = dict3.pop("name8","哈哈哈")
clear
建议 先判断key是否存在,再进行数据操作
if "name2" in dict3:
print("存在")
else:
print("不存在")
print(name)
1.6 字典的常见操作 5种字典的遍历
dict4 = {"name1":"小灰灰","[1,2,3]":"刘德华","name3":"吴彦祖","name4":"三胖胖"}
遍历字典,可以取到每一位key
第一种方式:
for key in dact4:
print(key)
print("key = %s,value = %s"%(key,dict4[key]))
for i in range(len(dict4)):
print(i)
第二种方式:
for index,key in enumerate(dict4):
print(index)
print(key)
print("key = %s,value = %s"%(key,dict[key]))
第三种方式:
keys = dict4.keys()
print(keys)
keys 是获取所有元素的key值
for key in dict4.keys():
print("key = %s,value = %s"%(key,dict[key]))
第四种方式
value是获取所有元素的value值
for value in dict4.values()
print(value)
第五种方式
items是获取所有的key-value键值对
for key,value in dict.items()
print("key = %s,value = %s"%(key,value))
与list比较:
dict字典:字典查找,插入的速度快,随着数据量增加,对速度没有太大影响
需要消耗的内存较大,消耗内存
list列表:列表查找,插入的速度慢,随着数据量的增加,对速度影响较大
列表需要内存较小,节约内存
copy操作,复制
dict5 = {"name1":"小灰灰","[1,2,3]":"刘德华","name3":"吴彦祖","name4":"三胖胖"}
print(dict5)
dict6 = dict5
dict6["name1"] = "美味可口的小灰灰"
print(dict6)
print(dict5)
dict7 = {"name1":"小灰灰","[1,2,3]":"刘德华","name3":"吴彦祖","name4":"三胖胖"}
print(dict7)
dict8 = dict7.copy()
dict8["name1"] = "美味可口的小灰灰"
print(dict8)
print(dict7)
二,元组 tuple
特点:1 与list类似
2 不可变类型
3 元组使用的是()
格式:
(元素1,元素2,元素3....)
描述:
用()包裹起来的多个元素组成元组,每个元素之间用逗号隔开
创建:
创建一个空的 tuple = ()
注意:创建只有一个元素的元组时,需要在该元素后面加个逗号
创建只有一个元素 tuple1 = (12,)
print(tuple1)
print(type(tuple1))
创建有多个元素的元组
tuple2 = (12,34,8,67,12,89)
#元组可以存放不同类型的元素
tuple3 = (12,34,8,67,12,"123")
print(tuple3)
查:
元组可以根据索引查询数据
tuple4 = ("李小璐","马蓉","白百何","文章","金三胖胖")
name = tuple[1]
注意:索引可以是负数
注意脚标越界异常
可以根据值查到索引
index = tuple4.index("金三胖胖")
print(index)
print(name)
不能增-删-改
tuple5 = (12,34,8,67,12,89)
不能修改
#tuple5[0] = 100
tuple5 = (12,[23,34,45],8,67,12,89)
#tuple6[1] = 100
tuple6[1][1] = 100
print(tuple6)
元组的常用操作
拼接
tuple7 = (1,2,3)
tuple8 = (2,3,4,5,6)
tuple9 = tuple7 + tuple8
print(tuple9)
乘法操作
tuple10 = tuple * 3
print(tuple10)
元组的截取
tuple11 = (0,1,2,3,4,5,6,7,8,9)
tuple12 = tuple11[3:]
tuple12 = [::-1]
print(tuple12)
判断元素是否在元组中
if 8 in tuple11:
print("存在")
求最大值最小值,max函数可以传元组
maxNumber = max(12,23,89,12,-100,87)
print(maxNumber)
求最小值
minNumber = min(12,23,89,12,-100,87)
print(minNumber)
二维元组
tuple13 = ((1,2,3),(3,4,5),(6,7,8))
# tuple14 = ([1,2,3],(3,4,5),(6,7,8))
num = tuple13[2][2]
print(num)
三维元组
tuple15 = (((1,2,3),(3,4,5),(6,7,8)),((1,2,3),(3,4,5),(6,7,8)),((1,2,3),(3,4,5),(6,7,8)))
遍历
tuple16 = (12,23,89,12,-100,87)
for i in tuple16:
print(i)
for i in range(len(tuple16)):
print(tuple[i])
for index,value in enumerate(tuple16):
#print(index)
print(value)
三 set集合
set集合:是一个无序的,不可重复的集合
相当于字典dict的key,但是没有value
创建一个空的set,set一般是通过set函数来创建的
set1 = set()
注意:{}空的表示的是字典
如果{}中的元素是key:value的形式,表示的是字典,
直接是key的形式,表示的是set
set1 = {}
set1 = {12:12}
set1 = ()
print(set1)
print(type(set1))
通过set创建时,需要用list列表,字典dict,元组tuple,字符串str
来转换
通过列表来转换
set是无序的
set2 = set([12,23,34,45,56])
set的元素不可重复
set2 = set([12,23,34,45,56,12,34])
print(set2)
print(type(set2))
list1 = [12,23,34,45,56,12,34]
set3 = set(list1)
将set转换为list
list2 = list(set3)
print(list2)
通过字典来转换---会将字典中的key取出来作为元素
dict1 = {"李小璐":30,"马蓉":40,"文章":35,"小灰灰":23}
set4 = set(dict1)
print(set4)
通过元组来转换
tuple1 = ("贾乃亮","王宝强","马伊俐","凤姐")
set5 = set(tuple1)
通过字符串来转换
str1 = "wen is a good man"
set5 = set(str1)
print(set5)
set6 = set(("贾乃亮","王宝强","马伊俐","凤姐"))
查 遍历
for i in set6:
print(i)
for index,key in enumerate(set6):
print(index)
print(key)
增 add表示增加1个,update表示增加多个
set6.add("陈冠希") 表示只增加一个元素
set6.add("陈冠")
set6.update(["小君君","小灰灰"])
print(set6)
删
set6.pop() 只随机删除一个元素
remove可以删除指定的元素
set6.remove("凤姐")
print(set6)
改 --- 不能改
交集,并集,差集
set7 = set([12,23,34,45])
set8 = set([34,45,56,67])
交集
set9 = set7 & set8
print(set9)
并集
set10 = set7 | set8
print(set10)
差集
set11 = set7 - set8
print(set11)
四 list的补充
list1 = [78,23,45,12,78,-90]
remove表示会删除找到的第一个元素
list1.remove(78)
获取元素在列表中的个数
count1 = list1.count(78)
print(count1)
for i in range(count1):
list1.remove(78)
print(list1)
最大值
maxNum = max(list1)
print(maxNum)
最小值
minNum = min(list1)
print(minNum)
排序
升序
sorted会生成一个新的排序后的列表,默认升序
list2 = sorted(list1)
sort()将原列表进行排序(默认是升序)
list1.sort()
print(list1)
降序
reverse表示是否反转
list2 = sorted(list1,reverse = True)
print(list2)
list1.sort(reverse=True)
将列表反转
list1.reverse()
print(list1)
五,copy
例子:
list1 = [0,1,2,3,4,5]
liast2 = list1
list2[0] = 100
print[list1]
print[list2]
例子:
list1 = [0,1,2,3,4,5]
list2 = list1.copy()
list2[0] = 100
print[list1]
print[list2]
例子:
list1 = [[7,8,9],1,2,3,4,5]
list2 = [[7,8,9],1,2,3,4,5]
list2 = list1.copy()
list2[0] = 100
list2[0][0] = 100
print(list1)
print(list2)
import copy
list1 = [[7,8,9],1,2,3,4,5]
#list2 = [[7,8,9],1,2]3,4,5]
list2 = copy.deepcopy(list1)
list2[0] = 100
list2[0][0] = 100
print(list1)
print(list2)