# 什么是集合?
集合(Set)是Python中的内置数据结构
集合可以看作是没有Value的字典
{'张三','李四','王五','赵六','宋七','杨八'}
# 集合的特点
集合元素是无序的
集合元素不能重复
集合是可变的
集合允许数学运算 交集、并集、差集等
集合是分散存储的
# 集合的存储原理
集合hash()
张三478718923
李四890931281
王五372917891
赵六489034277
通过hash()把集合转换
内存地址数据
372917891王五
890931281李四
478718923张三
489034277赵六
给这个集合开辟一块内存,分散无序存储。
效率高,但会浪费空间
# 集合的创建
使用{}符号创建集合
college1 = {'哲学','经济学','法学','教育学'} //每一次运行 顺序都不同,因为生成的散列值不同。
使用set()函数创建集合
college2 = set(["金融学","哲学","经济学","历史学","文学"])
使用set创建字符串集合
college3 = set("中华人民共和国") //会得到每一个字符的集合{"中","华".....}
# 空集合的创建
college4 = set() //不能用{},会生成字典
# 集合关系与数学运算
交集(intersection)
c3 = college1.intersection(college2) //交集,获取两个集合中重复的部分,并新建一个集合。
college1.intersection_update(college2) //交集,获取两个集合中重复的部分,并更新原集合。
并集(union)
c4 = college1.union(college2) //并集,将两个集合所有元素合并,去重。
union操作没有update
差集(difference)
c5 = college1.difference(college2) //差集,是指两个集合之间差异的部分。是以college1为基数的,单项的差集。
c6 = college1.symmetric_difference(college2) //双向差集
difference 有update操作 difference_update\symmetric_difference_update
# 集合间的关系操作
s1 = {1,2,3,4,5,6}
s2 = {6,5,4,3,2,1}
print(s1 == s2) //结果为True
s3 = {4,5,6,7}
s4 = {1,2,3,4,5,6,7,8}
print(s3.issubset(s4)) //结果为True 判断是否为子集
print(s4.issuperset(s3)) // 判断是否为父集
s5 = {5}
s6 = {1,3,5,7,9}
s5.isdisjoint(s6) //判断两个集合是否存在重复元素,返回True代表不存在,False代表存在。也可以用交集的办法判断。
# 操作集合元素(增删改查)
集合的遍历
college1 = {'哲学','经济学','法学','教育学'}
for c in college1:
print(c)
判断元素是否存在
print("哲学" in college1) //返回True
集合不支持按索引提取数据
新增数据
college1.add("计算机学") //添加已存在的会被忽略,一次只能添加一个
college1.update(["生物学","工程学"]) //一次添加多个,可以是列表或元组
集合不支持更新,只能删除后再增加
集合元素的删除
college1.remove("生物学") //删除不存在元素时会报错
college1.discard("生物学") //同样可以删除元素,遇到不存在元素时,则忽略删除操作。
# 三种内置生成式
## 生成式语法
[被追加的数据 循环语句 循环或者判断语句] |{}
列表生成式
lst1 = [ ]
for i in range(10,20):
lst.append(i*10)
//可以用如下生成式生成列表
lst2 = [i*10 for i in range(10,20)]
//复杂一点的生成式
lst3 = [i*10 for i in range(10,20) if i % 2 == 0]
//相当于如下
for i in range(10,20):
if i % 2 == 0:
lst3.append( i * 10)
字典生成式
lst5 = ['张三','李四','王五']
dict1 = {i+1:lst5[i] for i in range(0,len(lst5))}
print(dict1)
//相当于
for i in range(0,len(lst5)):
dict[i+1] = lst5[i]
集合生成式
set1 = {i*j for i in range(1,4) for j in range(1,4) if i == j}
print(set1)
网友评论