python—集合

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值