1.集合的定义(set)
set1={1,2,3,'hello',(1,2,3)}
print(set1,type(set1)
set = {1,2,3,'hello',(1,2,3),[1,2,3]}
print(set,type(set))
s = {1, 2, 3, 4, 1, 2, 3}
print(s, type(s))
由以上实验我们知道,集合是一个无序的,不重复的数据组合。用{}创建集合时,其子对象不可以包含可变对象
如何定义一个空集
s3 = set([])
print(s3, type(s3))
s2 = {} # 默认情况是dict, 称为字典
print(s2, type(s2))
集合应用1: 列表去重
li = [1,2,3,1,2,3]
print(list(set(li)))
2.集合的特性
集合支持的特性只有 成员操作符
索引, 切片, 重复, 连接,均不支持
1.成员操作符
s={1,2,3} print(1 in {1,2,3}) print(1 not in s)
2.for循环
for i in s:
print(i, end='|')
print()
for i, v in enumerate(s):
print("index: %s, value:%s" %(i, v))
3.集合的常用操作
1.集合的添加
s.add(1)
在集合中添加一项
s.update([1,3,4])
在集合中添加多项,跟的参数应该是可迭代类型
在这里要注意,由于集合为可变, 无序数据类型,所以其添加的顺序和在集合中存储的顺序不同
s={1,2,3,5,6} s.add(4) print(s)
s={1,2,6} s.update([2,3,4,5]) print(s)
2.集合的删除
s.remove(1)
删除集合中指定的元素
s.pop()
随机删除集合中的某个元素,并返回删除的元素
s={1,2,6} s.update([2,3,4,5]) s.remove(4) print(s)
s.clear()
清空集合中的所有元素
len(s)
求集合的长度
3.集合的关系测试
(交集、并集、差集、对等差分)
s1 = {1, 2, 3}
s2 = {2, 3, 4}
并集
print("并集:", s1.union(s2))
print("并集:", s1 | s2)
交集
print("交集:", s1.intersection(s2))
print("交集:", s1 & s2)
差集
print("差集:", s1.difference(s2)) # s1- (s1&s2) ###s1中有的元素,s2中没有
print("差集:", s2.difference(s1)) # s2- (s1&s2) ###s2中有的元素,s1中没有
print("差集:",s1-s2)
print("差集:",s2-s1)
对等差分: 并集-交集(两个集合中所有不共有的元素)
print("对等差分:", s1.symmetric_difference((s2)))
print("对等差分:", s1^s2)
s1 = {1, 2, 3} s2 = {2, 3, 4} print("并集:", s1 | s2) print("交集:", s1 & s2) print("差集:",s1-s2) print("差集:",s2-s1) print("对等差分:", s1^s2)
(子集、父集、有无交集)
s3 = {1,2}
s4 = {1,2,3}
print(s3.issubset(s4)) ###判断s3为s4的子集,若是返回True
print(s3.issuperset(s4)) ###判断s3为s4的父集,若是返回True
print(s3.isdisjoint(s4)) ###判断s3与s4没有交集,若确实没有交集返回True,若有返回False
练习:
1.随即产生2组各个数字的列表,每组10个数字,
要求:每个是数字的区值范围为[10,20]
统计20个数字中有多少个不同数字,
2组中不重复的数字有几个?分别是什么?
2组中重复的数字有几个?分别是什么?
s1=set([])
s2=set([])
import random
for i in range(1,10):
count1 = random.randint(10,20)
s1.add(count1)
for t in range(1, 10):
count2 = random.randint(10, 20)
s2.add(count2)
print(s1)
print(s2)
n1=s1|s2
n2=s1^s2
n3=n1-n2
print(n1,len(n1))
print(n2,len(n2))
print(n3,len(n3))