1 、集合的创建
- 集合时不重复的并且无序的序列。
- 集合创建可以使用{}以及set()的方式。
- 创建空集合的时候,必须使用set([]),使用{}创建出来的是一个空字典
>>> s = {1,1,3,5,3,6,7,5} # 定义创建一个集合
>>> s
set([1, 3, 5, 6, 7]) # 显示其中重复的元素都被自动去掉
>>> s1 = set([2,4,6,8,2,6,2]) # 使用set()创建的集合
>>> s1
set([8, 2, 4, 6]) # 重复元素都被自动qudiao
>>> s2 = {} # 该方式定义出来的是一个空的字典
>>> s2
{}
>>> type(s2) # 查看数据类型显示为字典
<type 'dict'>
>>> s3 = set([]) # 必须使用该方式创建空的集合
>>> s3
set([])
>>> type(s3) # 查看数据类型显示为集合
<type 'set'>
2、集合的特性
集合只支持成员操作符以及for循环遍历
1 成员操作符
通过成员操作符 判断元素是否属于该元组:
in # <元素> in <集合> 属于则为True,不属于为False
not in # <元素> not in <集合> 不属于则为True,属于为False
演示:
>>> s1
set([8, 2, 4, 6])
>>> 8 in s1
True
>>> 9 in s1
False
>>> 9 not in s1
True
>>> 2 not in s1
False
>>>
2 for 循环遍历
使用for 语句 可以取到集合中每一个元素的值
s1 = {1,4,6,2,7}
for i in s1 :
print(i)
运行效果:
[kiosk@foundation47 python]$ python3 shiyan.py # 输出每一个元素
1
2
4
6
7
3 、集合常用的方法
1 添加元素
集合是一个可变的数据类型,但是元素添加的顺序和在集合中存储的顺序不同。
>>> s = {2,5,8,1,6} # 集合元素的添加顺序
>>> s
set([8, 1, 2, 5, 6]) # 集合元素的存储顺序
add() :添加单个元素
>>> s
set([8, 1, 2, 5, 6]) # 查看集合元素
>>> s.add(3) # 添加一个新的元素
>>> s
set([1, 2, 3, 5, 6, 8]) # 新元素添加的位置不确定
update( x ) 也可以添加元素,且参数可以是列表,元组,字典等
>>> s
set([1, 2, 3, 5, 6, 8])
>>> s.update([4,7,9]) # 直接添加三个元素到集合中
>>> s
set([1, 2, 3, 4, 5, 6, 7, 8, 9])
2 删除元素
pop() # 随机删除集合的一个元素,并且该值可以被变量接收
s1 = {'lala', 'toto', 'tete', 'dodo'}
a = s1.pop()
print(a)
实验显示:多次执行的被删除的元素不确定
[kiosk@foundation47 python]$ python3 shiyan.py
tete
[kiosk@foundation47 python]$ python3 shiyan.py
toto
[kiosk@foundation47 python]$ python3 shiyan.py
dodo
[kiosk@foundation47 python]$ python3 shiyan.py
toto
[kiosk@foundation47 python]$ python3 shiyan.py
toto
remove() #删除指定元素 元素必须要存在,不存在会出现报错
>>> s1
set(['toto', 'dodo', 'lala'])
>>> s1.remove('dodo') # 指定删除元素dodo
>>> s1
set(['toto', 'lala']) # 删除成功
>>> s1.remove('tete') # 当指定的元素不存在的时候,出现报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'tete'
3、计算集合元素个数
len() :计算集合元素个数
>>> s
set([3, 4, 5, 6, 7, 8, 9])
>>> len(s)
7
4 清空集合
clear() :清空集合
>>> s
set([3, 4, 5, 6, 7, 8, 9])
>>> s.clear() # 清空集合
>>> s
set([]) # 显示集合中所有的元素被清除
5 并集
s1.union(s2)
s1|s2
>>> s1 = {1,2,3,5,7,4}
>>> s2 = {2,4,6,8,0,3} # 定义两个集合
>>> s1|s2 # 求两个集合的并集
set([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>> s1.union(s2) # 求两个集合的并集
set([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>> s2.union(s1) # 求两个集合的并集
set([0, 1, 2, 3, 4, 5, 6, 7, 8])
6 交集
s1.intersection(s2)
s1&s2
>>> s1 = {1,2,3,5,7,4}
>>> s2 = {2,4,6,8,0,3} # 定义两个集合
>>> s1&s2 # 求两个集合的交集
set([2, 3, 4])
>>> s1.intersection(s2) # 求两个集合的交集
set([2, 3, 4])
>>> s2.intersection(s1) # 求两个集合的交集
set([2, 3, 4])
7 差集
s1和s2的差集:s1中有哪些元素s2中没有 注意位置不同得到的结果不一致
s1.difference(s2)
s1-s2
>>> s1 = {1,2,3,5,7,4}
>>> s2 = {2,4,6,8,0,3} # 定义两个集合
>>> s1 - s2 # s1和s2的差集:s1中有哪些元素s2中没有
set([1, 5, 7])
>>> s1.difference(s2) # s1和s2的差集:s1中有哪些元素s2中没有
set([1, 5, 7])
8 对等差分:(并集 - 交集)
s1.symmetric_difference(s2)
s1^s2
>>> s1
set([1, 2, 3, 4, 5, 7])
>>> s2
set([0, 2, 3, 4, 6, 8])
>>> s1^s2
set([0, 1, 5, 6, 7, 8])
>>> s1.symmetric_difference(s2)
set([0, 1, 5, 6, 7, 8])
9 判断
s3.issubset(s4) :s3是否s4的子集
s3.issuperset(s4) :s3是否s4的超集
s3.isdisjoint(s4) :两个集合是不是不相交
>>> s3 = {1,2,3,}
>>> s4 = {1,2,3,4,5,6}
>>> s3.issubset(s4) # s3时s4的子集
True
>>> s4.issubset(s3) # s4不是s3的子集
False
>>> s4.issuperset(s3) # s4时s3的超集
True
>>> s4.isdisjoint(s3) # s3 和 s4相交
False
>>>
应用练习:
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性
他先用计算机生成了N个1~1000之间的随机整数(N<=1000)
,N是用户输入的,对于
其中重复的数字,只保留一个,把其余相同的数字去掉,
不同的数对应着不同的学生的学号,
然后再把这些
数从小到大排序,按照排好的顺序去找同学做调查,
请你协助明明完成“去重”与排序工作
import random
max = int(input('请输入数量N <=1000 :'))
sid = set([])
while max > 0 :
sid.add(random.randint(1,1000))
max -= 1
sid2 = sorted(sid)
print(sid2)