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