Python-set集合的使用

# 创建集合的几种方式
# 集合创建方式1 {""}/{''} 这样的方式创建
college1 = {"哲学", "经济学", "法学", "教育学"}
print(type(college1))
print(college1)
print()

# 方式2
name1 = set(["张三", "李四", "王五", "赵六", "孙七"])
print(type(name1))
print(name1)
print()

# 方式3 这样的创建方式 会把括号里的值进行拆分成每个字符
country = set("中华人民共和国")
print(type(country))
print(country)
print()

# 测试获取交集/并集/差集
college1 = {"哲学", "经济学", "法学", "教育学"}
college2 = {"金融学", "哲学", "经济学", "历史学", "文学"}

# 获取交集 并返回一个交集后的新结果
c3 = college1.intersection(college2)
print(c3)
# 获取一个交集并更新原调用方集合数据
college1.intersection_update(college2)
print(college1)

college1 = {"哲学", "经济学", "法学", "教育学"}
college2 = {"金融学", "哲学", "经济学", "历史学", "文学"}

# 获取一个并集 将两个集合合并成一个新的集合 并去除重复
c4 = college1.union(college2)
print(c4)

# 差集的计算
# 单项差集 college1 在 college2 中 不存在的部分 进行返回
c5 = college1.difference(college2)
print(c5)
# 单项差集 college1 在 college2 中不存在的部分 并对调用方college1 数据进行修改
college1.difference_update(college2)
print(college1)

# 双向差集
college1 = {"哲学", "经济学", "法学", "教育学"}
college2 = {"金融学", "哲学", "经济学", "历史学", "文学"}
c6 = college1.symmetric_difference(college2)
print(c6)
# 双向差集 计算双方都不存在的差集 并对调用college1 数据进行修改
college1.symmetric_difference_update(college2)
print(college1)

"""
集合间关系判断的语句
"""
# 判断两个集合元素是否相等 集合之间的顺序不影响之间的判断
s1 = {1, 2, 3, 4, 5, 6, 7}
s2 = {7, 6, 5, 4, 3, 2, 1}
print(s1 == s2)

# 判断两个集合 其中一个集合为另外一个集合的子集(包含该集合数据)
s3 = {4, 5, 6, 7, 8}
s4 = {1, 2, 3, 4, 5, 6, 7, 8, 9}
# 判断s3 调用方是否为s4 的子集
print(s3.issubset(s4))

# 判断s4 调用方是否为s3 的父级
print(s4.issuperset(s3))

s5 = {"1", "2", "3", "4", "5"}
s6 = {"4"}
# 判断两个集合是否存在重复元素
# 这个有点拗口 True 代表是否不存在重复元素  False 代表存在重复元素
print(s5.isdisjoint(s6))

"""
set 集合的增删改查
"""
# 集合的遍历
college2 = {"金融学", "哲学", "经济学", "历史学", "文学"}
for i in college2:
    print(i)

# 判断一个集合中是否包含指定值
print("文学" in college2)
# 集合的新增 如果出现重复值的数据 会忽略该值
# add 方法一次只能新增一个数值 如果需要一次新增多个数值 需要使用update 方法
college2.add("文学")
college2.add("经济学")
college2.add("教育学")
college2.update(["张三", "李四", "王五", "赵六"])
print(college2)
# 集合的删除 remove在删除集合中不存在的值时会抛出错误
# 在正常使用时可以使用discard  在实际业务使用中可以根据不同的业务场景使用不同的方法
# college2.remove("张三")
college2.discard("张三")
print(college2)
# 集合的修改 因为没有索引指定不了需要修改的数据
# 在集合中需要先删除集合中的值 然后再进行新增
college2.discard("李四")
college2.update(["这是修改后的李四"])
print(college2)

"""
三种内置的生成式 list/dict/set (列表生成式/字典生成式/集合生成式)
生成式的格式[ 添加元素的语句 循环方式规则(与正常 for i in range(1,10) 类似) 后面可以再添加循环语句或者判断语句 ]
[被追加的数据 循环语句 循环或者判断语句]
如: list=[j*10 for i in range(1,10) for j in range(1,5) if j%2==0] 这句话 解析成原代码为:
for i in range(1,10):
    for j in range(1,5):
        if j%2==0:
            list.append(j*10)
"""
# 创建 列表生成式 正常方法创建的list
list1 = []
for i in range(10, 20):
    list1.append(i)
print(list1)

# 使用列表生成式创建的list
list2 = [i for i in range(10, 20)]
print(list2)
# 稍复杂的列表生成式
list3 = [j * 10 for i in range(1, 10) for j in range(1, 5) if j % 2 == 0]
print(list3)

# 字典生成式 使用的是大括号 被追加的数据是k:v 形式的
temp_list = ["张三", "李四", "王五", "赵六", "孙七"]
dict1 = {i + 1: temp_list[i] for i in range(0, len(temp_list)) if "孙" not in temp_list[i]}
print(dict1)

# 集合生成式 使用的也是大括号 但是被追加的数据 不是k:v形式的 与列表生成式相同
set1 = {i * j for i in range(1, 10) for j in range(1, 20) if j % i == 0}
print(type(set1))
print(set1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值