1.集合(set)
集合是一个无序,可变,不允许数据重复的容器。
1.1定义
v1 = {11,22,33,"alex"}
- 无序,无法通过索引取值。
- 可变,可以添加和删除元素。
v1 = {11,22,33,44}
v1.add(55)
print(v1)#{33, 11, 44, 22, 55}
- 不允许数据重复
v1 = {11,22,33,44}
v1.add(22)
print(v1)#{33, 11, 44, 22}
注意:定义空集合时,只能使用v = set(),不能使用v={}(这样是定义一个空字典)。
v1 = []
v1 = List()
v2 = ()
v2 = tuple()
v3 = set()
v4 = {}
v4 = diet()
1.2独有功能
1.添加元素
data = {"刘嘉玲","关之琳","王祖赞"}
data.add("郑福林")
print(data)
data = set()
data.add("郑福林")
data.add("周杰伦")
print(data)
2.删除元素
data = {"刘嘉玲","关之琳","王祖赞","张曼玉","李若彤"}
data.discard("关之琳")
print(data)
3.交集
s1 = {"刘能","赵四","皮长山"}
s2 = {"刘科长","冯乡长","皮长山"}
s4 = s1.intersection(s2)#取两个集合的交集
print(s4)#{'皮长山'}
s3 = s1 & s2#取两个集合的交集
print(s3)#{'皮长山'}
4.并集
s1 = {"刘能","赵四","皮长山"}
s2 = {"刘科长","冯乡长","皮长山"}
s4 = s1.union(s2)#取两个集合的并集
print(s4)#{'赵四', '刘能', '冯乡长', '刘科长', '皮长山'}
s3 = s1 | s2#取两个集合的并集
print(s3)#{'赵四', '刘能', '冯乡长', '刘科长', '皮长山'}
5.差集
s1 = {"刘能","赵四","皮长山"}
s2 = {"刘科长","冯乡长","皮长山"}
s4 = s1.difference(s2)#{'刘能', '赵四'}
s6 = s1.difference(s2)#{'冯乡长', '刘科长'}
s3 = s1 - s2#{'刘能', '赵四'}
s5 = s2 - s1#{'冯乡长', '刘科长'}
print(s3,s4,s5,s6)
1.3公共功能
1.减,计算差集
s1 = {"刘能","赵四","皮长山"}
s2 = {"刘科长","冯乡长","皮长山"}
s3 = s1 - s2#{'刘能', '赵四'}
s5 = s2 - s1#{'冯乡长', '刘科长'}
print(s3,s5)
2.&,计算交集
s1 = {"刘能","赵四","皮长山"}
s2 = {"刘科长","冯乡长","皮长山"}
s3 = s1 & s2#取两个集合的交集
print(s3)#{'皮长山'}
3.|,计算并集
s1 = {"刘能","赵四","皮长山"}
s2 = {"刘科长","冯乡长","皮长山"}
s3 = s1 | s2#取两个集合的并集
print(s3)#{'赵四', '刘能', '冯乡长', '刘科长', '皮长山'}
4.长度
v = {"刘能","赵四","皮长山"}
data = len(v)
print(data)
5.for循环
v = {"刘能","赵四","皮长山"}
for item in v:
print(item)
1.4转换
其他类型如果想要转换为集合类型,可以通过set进行转换,并且如果数据由重复自动删除。
v1 = "吴佩琦"
v2 = set(v)
print(v2)#{'佩', '琦', '吴'}
v1 = [11,22,33,44,11,99]
v2 = set(v1)
print(v2)#{33, 99, 11, 44, 22}
v1 = (11,22,33,11)
v2 = set(v1)
print(v2)#{33, 11, 22}
提示:这是一个去重手段。
data = {11,22,33,3,99}
v1 = list(data)#[33, 99, 3, 22, 11]
v2 = tuple(data)#(33, 99, 3, 22, 11)
1.5其他
1.51集合的存储原理
1.52元素必须可哈希
因存储原理,集合的元素必须是可哈希的值,即:内部通过哈希表把值转换成一个数字。
v1 = hash("吴佩琦")
print(v1)#785100499468713587
v2 = hash((11,22,33,44,))
print(v2)#8386256510965472093
目前可哈希的数据类型:int,bool,str,tuple而list,set是不可哈希的。
总结:集合的元素只能是:int,bool,str,tuple。
- 转换成功
v1 = [11,22,33,3,99,22]
v2 = set(v1)
print(v2)#{33, 3, 99, 11, 22}
- 转换失败
v1 = [11,22,33,["alex","eric"],99,22]
v2 = set(v1)#报错
print(v2)
1.53查找速度特别快
因存储原理特殊,集合的查找效率非常高(数据大了才明显)。
1.54对比和嵌套
注意:由于True和False本质上存储的是1和0,而集合又不允许重复,所以在整数0,1和False,True出现在集合中会有如下现象:
v1 = {True,1}
print(v1)#{True}
v2 = {1,True}
print(v2)#{1}
v3 = {0,False}
print(v3)#{0}
v4 = {False,0}
print(v4)#{False}
强插:None类型
python的数据类型中有一个特殊的值none,意味着这个值啥都不是或表示空。相当于其他语言中null作用一样。在一定程度上可以帮助我们节省内存。例如:
v1 = None
v2 = None
...
v1 = [11,22,33,44]
v2 = [11,22,33]
目前所有转换为布尔值为False的值有:
0
""
[] or list()
() or tuple()
set()
None
2.字典(dict)
字典是无序,键不重复且元素只能是键值对的可变的容器。
data = {"k1":1,"k2":2}
- 容器
- 元素必须键值对
- 键不重复,重复则会被覆盖
data = {"k1":1,"k1":2}
print(data)#{'k1': 2}
- 无序(在python3.6+字典就是有序了,之前的字典都是无序的)
2.1定义
v1 = {}
v2 = dict()
data = {
"k1":1,
"k2":2
}
info = {
"age":12,
"status":True,
"name":"wupeiqi",
"hobby":['篮球','足球']
}
字典中对键值的要求:
-
键:必须可哈希。目前为止学到的可哈希的类型:int/bool/str/tuple;不可哈希的类型:list/set/dict。
-
值:任意类型。
data_dict = {
"吴佩琦":29,
True:5,
123:5,
(11,22,33):["alex","eric"]
}
data_dict = {
1:29,
True:5
}
print(data_dict)#{1: 5}
2.2独有功能
1.获取值
info = {
"age":12,
"status":True,
"name":"吴佩琦"
}
data1 = info.get("name")
print(data1)#吴佩琦
data2 = info.get("email")
print(data2)#None
data3 = info.get("hobby",123)
print(data3)#123
2.所有的键
info ={"age":12,"status":True,"name":"wupeiqi","eamail":"[email protected]"}
data = info.keys()
print(data)#dict_keys(['age', 'status', 'name', 'eamail'])
result = list(data)
print(result)#['age', 'status', 'name', 'eamail']
3.所有的值
info ={"age":12,"status":True,"name":"wupeiqi","eamail":"[email protected]"}
data = info.values()
print(data)#dict_values([12, True, 'wupeiqi', '[email protected]'])
4.所有的键值
info ={"age":12,"status":True,"name":"wupeiqi","eamail":"[email protected]"}
data = info.items()
print(data)
for item in info.items():
print(item[0],item[1])#item是一个元组(键,值)
for key,value in info.items():
print(key,value)#key代表键,value代表值,将键值从元组中直接拆分出来了。
5.设置值
data = {
"name":"吴佩琦",
"eamail":"[email protected]"
}
data.setdefault("age",18)
print(data)#{'name': '吴佩琦', 'eamail': '[email protected]', 'age': 18}
data.setdefault("name","alex")
print(data)#{'name': '吴佩琦', 'eamail': '[email protected]', 'age': 18}
6.更新字典键值对
info = {"age":12,"status":True}
info.update({"age":14,"name":"吴佩琦"})#info中没有的键直接添加;有的键则更新值
print(info)#{'age': 14, 'status': True, 'name': '吴佩琦'}
7.移除指定键值对
info = {"age":12,"status":True}
data = info.pop("age")
print(info)#{'status': True}
print(data)#12
8.按照顺序移除(后进先出)
info ={"age":12,"status":True,"name":"wupeiqi","eamail":"[email protected]"}
data = info.popitem()
print(info)#{'age': 12, 'status': True, 'name': 'wupeiqi'}
print(data)#('eamail', '[email protected]')
- py3.6后,popitem移除最后的值。
- py36之前,popitem随机删除。
2.3公共功能
1.求并集(python3.9新加入)
v1 = {"k1":1,"k2":2}
v2 = {"k2":22,"k3":33}
v3 = v1 | v2
print(v3)#{'k1': 1, 'k2': 22, 'k3': 33}
2.长度
info = {"age":12,"status":True,"name":"吴佩琦"}
data = len(info)
print(data)#3
3.是否包含
info = {"age":12,"status":True,"name":"吴佩琦"}
v1 = "age" in info
print(v1)#True
v2 = "age" in info.keys()
print(v2)#True
4.索引(键)
字典不同元组和列表,字典的索引是键,而列表和元组则是0,1,2等数值。
info = {"age":12,"status":True,"name":"吴佩琦"}
print(info["age"])#12
print(info["status"])#True
print(info["name"])#吴佩琦
value = info.get("name")
print(value)#吴佩琦
5.根据键修改值和添加值和删除键值对
info = {"age":12,"status":True,"name":"吴佩琦"}
info["gender"] = "男"
print(info)#{'age': 12, 'status': True, 'name': '吴佩琦', 'gender': '男'}
info = {"age":12,"status":True,"name":"吴佩琦"}
info["age"] = "18"
print(info)#{'age': '18', 'status': True, 'name': '吴佩琦'}
info = {"age":12,"status":True,"name":"吴佩琦"}
del info["age"]#删除info字典中键为age的那个键值对(键不存在则报错)
print(info)#输出{'status': True, 'name': '吴佩琦'}
6.for循环
由于字典也属于容器,内部可以包含多个键值对,可以通过循环对其中的:键,值,键值进行循环;
info = {"age":12,"status":True,"name":"吴佩琦"}
for item in info.keys():
print(item)
info = {"age":12,"status":True,"name":"吴佩琦"}
for item in info.values():
print(item)
info = {"age":12,"status":True,"name":"吴佩琦"}
for item in info.items():
print(key,value)
2.4转换
想要转换为字典
v = dict([["k1","v1"],["k2","v2"]])
print(v)#{'k1': 'v1', 'k2': 'v2'}
info = {"age":12,"status":True,"name":"吴佩琦"}
v1 = list(info)#['age', 'status', 'name']
v1 = list(info.keys())#['age', 'status', 'name']
v1 = list(info.values())#[12, True, '吴佩琦']
v1 = list(info.items())#[('age', 12), ('status', True), ('name', '吴佩琦')]
2.5其他
2.51存储原理
1.52速度快
info = {"age":12,"status":True,"name":"吴佩琦"}
for age in info:
print("在")
info = {"age":12,"status":True,"name":"吴佩琦"}
v1 = info["age"]
v2 = info.get("age")
print(v1,v2)
2.5.3嵌套
我们已学了很多数据类型,在涉及多种数据类型之间的嵌套时,需要注意以下几点:
- 字典的键必须是可哈希的(list/set/dict不可哈希)
- 字典的值可以是任意类型
- 字典的键和集合的元素在遇到布尔值和1,0时,需要注意重复的情况。
- 元组的元素不可以被替换
3.浮点型(float)
浮点型,一般在 开发中用于表示小数
v1 = 3.14
v2 = 9.89
关于浮点型的其他知识点如下:
- 在类型转换时需要,在浮点型转换为整形时,会将小数部分去掉。
v1 = 3.14
data = int(v1)
print(data)
- 想要保留小数点后N位
v1 = 3,1415926
result = round(v1,3)
print(result)#3.142
标签:info,13,python,True,age,v1,print,data
From: https://www.cnblogs.com/zhangyj213/p/17990778