深入理解set集合

集合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里面的重复元素;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值