Python------集合详解

Python的特征数据类型-----集合(setction)

集合:

_集合是一个无需不重复元素的序列, 分为 可变 和 不可变的集合两种。_

集合的定义:

集合可以使用{ }或set()方法来定义(注意使用set()方法来定义集合时,只能有一个参数),但是要注意的是,空集合的创建必须使用set()方法,而不是{ },因为单独使用{ }创建的其实是一个字典。

#集合的定义
section = {1,2,3,234}
section1 = set([11,2,3,6,4])
print(type(section1),section1)
section2 = set()
print(type(section2),section2)
print(type(section),section)
#运行结果
<class 'set'> {2, 3, 4, 6, 11}
<class 'set'> set()
<class 'set'> {3, 1, 234, 2}

进程已结束,退出代码0

集合的两个基本特点:

集合的两个基本特征是去重和成员测试

去重是指把一个含有重复元素的列表或元组等数据类型转化为集合,其中的重复元素只出现一次。成员测试,及判断元素是否在集合内。

举例:

#定义一个列表和一个元组
list = [1, 1, 2, 3, 34, 5, "数", 66, 6,  6, 5]; tuple = (1, 2, 3,  4, 4, 5, 6, 7, 88, 8, 8, 8)
print("转换为集合前的列表:",list,"\n","转换为集合前的元组:",tuple)
list = set(list)
tuple = set(tuple)
print("转换为集合后在转换回列表后的列表元素:",list,"\n","转换为集合再转换回元组后的元组中的元素为:",tuple)
#运行结果

转换为集合前的列表: [1, 1, 2, 3, 34, 5, '数', 66, 6, 6, 5] 
 转换为集合前的元组: (1, 2, 3, 4, 4, 5, 6, 7, 88, 8, 8, 8)
转换为集合后在转换回列表后的列表元素: {1, 2, 3, 34, 5, '数', 66, 6} 
 转换为集合再转换回元组后的元组中的元素为: {1, 2, 3, 4, 5, 6, 7, 8, 88}

进程已结束,退出代码0

集合间的运算:

运算符意 义
&交集
|并集
-差补或相对补集
<真子集
<=子集
>真超集
>=超集
==两集合相等
!=两集合不相等
in属于,是里面的元素
not in不属于

举例:

A = {1, 2, 3, 4, 5, 6, 7}
B = {4, 6, 7, 8, 9, 12}
C = set()
print("A∩B=", A & B)
print("A∪B=", A | B)
print("A-B=",A-B)
print("A⊕B=",A^B)
print("A==B",A==B)
print(1 in A)
print(9 not in B)
print(A > C)
print(A <= B)



#运行结果
A∩B= {4, 6, 7}
A∪B= {1, 2, 3, 4, 5, 6, 7, 8, 9, 12}
A-B= {1, 2, 3, 5}
A⊕B= {1, 2, 3, 5, 8, 9, 12}
A==B False
True
False
True
False

进程已结束,退出代码0

集合中方法:

假设有两个已经定义好的集合A、B

方 法功 能
A.issubset(B)若A是B的子集,则返回True,否则返回 False、
A.issuperset(B)若A是B的超集·,则返回True,否则返回 False
A.intersection(B)返回A与B的交集
A.union(B)返回A与B的并集
A.differebce(B)返回一个新的集合,该集合是集合A除去和集合B的公共元素后的集合
A.symmetric_difference(B)返回一个新集合,该集合是A或B的成员,但不是A和B共有的成员
A.copy()返回一个浅拷贝

注意:以上方法适用于所有集合(可变与不可变)

实例:

A = {1, 2, 3};B = {3, 4, 5}
print("A是B的子集", A.issubset(B))
print("A是B的超集", A.issuperset(B))
print("A∩B=", A.intersection(B))
print("A∪B=", A.union(B))
print("A⊕B=", A.symmetric_difference(B))
print("A-B=", A.difference(B))
#运行结果

A是B的子集 False
A是B的超集 False
A∩B= {3}
A∪B= {1, 2, 3, 4, 5}
A⊕B= {1, 2, 4, 5}
A-B= {1, 2}

进程已结束,退出代码0



注意:以下表格中的方法只适用于可变的集合

假设A、B是两个已定义好的可变集合

方 法说 明
A.add()在集合A中添加新对象
A.clear()清空集合A中的所有对象
A.pop()删除A中的任意元素,并返回,A为空时报错
A.remove(obj)删除A中的指定元素,没找到时报错
A.discard(obj)在A中删除指定元素,没找到时,返回None
A.update(B)用B集合中的元素来修改A集合,等价于A∪B
A.intersection_update(B)用A和B的交集来更新A集合
A.difference_update(B)从A中移除和B一样的元素
A.symmetric_difference(B)将A修改成A和B的对称差

实例

A = {1, 2, 3};B = {3, 4, 5}

A.update(B)
print("A=",A)
A.discard(1)
print("A=",A)
A.pop()
print("A=",A)
A.add((15))
print("A=",A)
A.remove(15)
print("A=",A)
A.clear()
print("A=",A)
#运行结果
A= {1, 2, 3, 4, 5}
A= {2, 3, 4, 5}
A= {3, 4, 5}
A= {3, 4, 5, 15}
A= {3, 4, 5}
A= set()

进程已结束,退出代码0
实战·练习:

随机给处指定个数的数字,并给他们排序

import random
x = int(input("请输入你要排序的数字个数:"))
lists = []
for i in range(x):
    e = random.randint(1, 100)
    lists.append(e)
    lists.sort()
    print("输入的数字序列:", lists)
set = set(lists)#列表转换为集合,去重

print("无重复数字升序排列:", sorted(set))
print("无重复数字降序排列:", sorted(set, reverse=True))

#运行结果


请输入你要排序的数字个数:12
输入的数字序列: [69]
输入的数字序列: [6, 69]
输入的数字序列: [6, 22, 69]
输入的数字序列: [6, 22, 69, 78]
输入的数字序列: [6, 22, 64, 69, 78]
输入的数字序列: [6, 22, 36, 64, 69, 78]
输入的数字序列: [6, 22, 36, 41, 64, 69, 78]
输入的数字序列: [6, 22, 36, 41, 64, 64, 69, 78]
输入的数字序列: [6, 22, 36, 41, 64, 64, 69, 78, 86]
输入的数字序列: [6, 22, 36, 41, 64, 64, 69, 78, 81, 86]
输入的数字序列: [6, 22, 36, 41, 64, 64, 69, 78, 78, 81, 86]
输入的数字序列: [6, 22, 36, 41, 64, 64, 65, 69, 78, 78, 81, 86]
无重复数字升序排列: [6, 22, 36, 41, 64, 65, 69, 78, 81, 86]
无重复数字降序排列: [86, 81, 78, 69, 65, 64, 41, 36, 22, 6]

进程已结束,退出代码0

life is short ,you need Python.
欢迎各位为大佬评论点赞支持!
谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

由心同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值