1. 集合的定义
s={0,1,2,8,4,5,6}
print(s,type(s))
s1={1}
print(s1,type(s1))
输出结果:
{0, 1, 2, 4, 5, 6, 8} <class 'set'>
{1} <class 'set'>
s2={} #默认情况是字典dict
print(s2,type(s2))
s3=set({})
print(s3,type(s3))
输出结果:
{} <class 'dict'>
set() <class 'set'>
2. 集合的应用
li=[1,2,2,3,5,6,4,4]
print(list(set(li)))
输出结果:
[1, 2, 3, 4, 5, 6]
3. 集合的特性
集和支持的特性只有 成员操作符(索引 切片 重复 连接 均不支持) 成员操作符
s = {1,2,3}
print(1 in {1,2,3}) #True
print(1 not in s) #False
# for循环
for i in s:
print(i,end=' ')
print()
print('~~~~~~')
for i,v in enumerate(s):
print('index: %s,value:%s' %(i,v)))))
输出结果:
True
False
1 2 3
~~~~~~
index: 0,value:1
index: 1,value:2
index: 2,value:3
4. 集合的常用方法
并集 并集有两种写法s1.union(s2))和 s1 | s2
s1 = {1, 2, 3}
s2 = {2, 3, 4}
print('并集:', s1.union(s2))
print('并集:', s1 | s2)
输出结果:
并集: {1, 2, 3, 4}
并集: {1, 2, 3, 4}
交集 交集有两种写法s1.intersection(s2))和 s1 & s2
s1 = {1, 2, 3}
s2 = {2, 3, 4}
print('交集:',s1.intersection(s2))
print('交集:',s1 & s2)
输出结果:
交集: {2, 3}
交集: {2, 3}
差集 可以理解为s1中有的而s2中没有的元素 差集有两种写法s1.difference(s2))和 s1 - s2
s1 = {1, 2, 3}
s2 = {2, 3, 4}
print('差集:',s1.difference(s2)) # s1 - (s1&s2)
print('差集:',s2.difference(s1)) # s2 - (s1&s2)
print('差集:',s1-s2)
print('差集:',s2-s1)
输出结果:
差集: {1}
差集: {4}
差集: {1}
差集: {4}
对等差分 并集 - 交集 有两种写法s1.symmetric_difference(s2)) 和 s1 ^ s2
s1 = {1, 2, 3}
s2 = {2, 3, 4}
print('对等差分:',s1.symmetric_difference(s2))
print('对等差分:',s1^s2)
输出结果:
对等差分: {1, 4}
对等差分: {1, 4}
s3 = {1,2}
s4 = {1,2,3}
# s3是否为s4的子集
print(s3.issubset(s4))
输出结果:
True
s3 = {1,2}
s4 = {1,2,3}
# s3是否为s4的超集
print(s3.issuperset(s4))
# s4是否为s3的超集
print(s4.issuperset(s3))
输出结果:
False
True
s3 = {1,2}
s4 = {1,2,3}
# 两个集和是不是不相交
print(s3.isdisjoint(s4))
输出结果:
False
5. 集合的小练习
问题: 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性 他先用计算机生成了N个1~1000之间的随机整数(N<=1000),N是用户输入的,对于 其中重复的数字,只保留一个,把其余相同的数字去掉,不同的数对应着不同的学生的学号,然后再把这些 数从小到大排序,按照排好的顺序去找同学做调查,请你协助明明完成“去重”与排序工作 代码
s = set([])
for i in range(int(input('N:'))):
s.add(random.randint(1,1000))
print(sorted(s))
结果