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.
欢迎各位为大佬评论点赞支持!
谢谢!