集合set
set的引出
假设场景一:大一新生刚开学,大家争先恐后地加入新的社团,我们怎么记录呢?
- 社团通过列表存储加入该社团的新生信息。
假设场景二: 有的同学加入王者荣耀兴趣小组和街舞社两个社团,怎么统计加入社团的新生信息呢?
- 上面的场景实质就是考虑用列表存储加入各个社团的新生姓名,如何去重?
- 笨办法:新建一个空的列表
l=[]
,for循环依次读取每个社团列表的新生姓名,然后判断该新生姓名是否已经存储在列表l
中,如果新生姓名不存在于新列表时,添加该新生姓名到新列表中。是不是觉得很麻烦呢? 额……麻烦就对了,python
的创始人也考虑到这个问题,看看下面的新办法吧。- 新办法: 我们都知道,集合是有序的序列,所以集合里面是没有重复的元素,因此最简单的去掉集合重复的元素就是对原有列表进行类型转化,转化为集合类型。
假设场景三:找出既报了王者荣耀兴趣组又报了街舞社的学生姓名,怎么做?
- 这个怎么去考虑呢?其实也很简单了,参加王者荣耀兴趣小组的新生信息存储在一列表
l1
,参加街舞社的新生信息存储在列表l2
,那我就可以直接求这两个列表的交集。然而,列表没有求交集、并集、差集的方法,
set的应用场景
根据前面的这些铺垫,对于为什么会有集合set这个数据类型有了一定的了解,那现在我们做以总结:
- 集合是一个无序的,不重复的数据组合。
- 集合可去除列表中重复的元素。
- 集合有其他数据类型没有的属性,即关系测试,包含交集、差集、并集、是否为子集、是否为父集等方法。
集合的关系测试操作
#/usr/bin/env python
#coding:utf-8
# 定义一列表,名为list_1
list_1 = [1, 2, 3, 4, 5, 1, 2, 3]
# 通过set方法,将数据类型从列表转换为集合的数据类型
set_1 = set(set_1)
# 直接定义一集合,名为set_2
set_2 = {1, 2, 45, 66, 3}
print set_1, type(list_1),type(set_1)
print set_1, set_2
'''
实现集合的关系的第一种方式:set已有方法实现
'''
# 交集
print "交集为:%s" % set_1.intersection(set_2)
#并集
print "并集为:%s" % set_1.union(set_2)
#差集
print "set_1与set_2的差集为:%s" % set_1.difference(set_2)
print "set_2与set_1的差集为:%s" % set_2.difference(set_1)
# 对等差分 //symmetric 对称的,与set_1.difference刚好相反
print "set_1的对等差分:%s " % set_1.symmetric_difference(set_2)
#子集
print "set_1是set_2的子集么? %s" % set_1.issubset(set_2)
#父集
print "set_2是set_1的父集么? %s" % set_1.issuperset(set_2)
#Return True if two sets have a null intersection.
print "set_1和set_2是否没有交集? %s" % set_1.isdisjoint(set_2)
'''
实现集合的关系的第二种方式:数学符号实现
'''
# 交集
print set_1 & set_2
#并集
print set_1 | set_2
#差集
print set_1 - set_2
print set_2 - set_1
# 对等差分
print set_1 ^ set_2
集合的增删
#!/usr/bin/env python
#coding:utf-8
'''
实现集合的增加与删除
'''
s = {1,2,3}
# 集合的添加
s.add(1) #在集合中添加一项
s.update([1,3,4]) #在集合中添加多项,跟的参数应该是可迭代类型
print s
# 集合的删除
s.remove(1) #删除集合中指定的元素,如果该元素不存在,则报错
s.discard(1) #删除集合中指定的元素,如果该元素不存在,则不报错
s.pop() #随机删除集合中的某个元素
s.clear() #清空集合的所有元素
# 集合的其他操作
print len(s) #显示集合set的长度
print 1 in s #检测某元素是否为集合s的成员,返回布尔值
s.copy() #集合的浅拷贝,此处不深入研究,后面会说
总结:
该篇文档主要将的集合set的一些应用场景,以及集合的基本操作,基础部分的操作应该多家练习,熟练操作,才能为后面大型项目的编写打下坚实的基础。
面试有关集合的问题:
- 请写出一段Python代码实现删除一个list里面的重复元素;