集合 set

写在最前,必须要会的:
1、长度len
2、成员运算in和not in
3、|合集
4、&交集
5、-差集
6、^对称差集
7、==
8、父集:>,>=
9、子集:<,<=


作用:去重,关系运算

可变类型与不可变类型的区别:
可变类型是不可hash类型
不可变类型是可hash类型: 字符串,数字,元组

定义集合:
集合:用花括号{}表示,可以包含多个元素,用逗号分割
集合的元素遵循三个原则:
1:每个元素必须是不可变类型(可hash,可作为字典的key),不可变类型只有数字,字符串,元组,所以集合的元素也只能是这三种
2: 没有重复的元素
3:无序排列
注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值

s3={1,2,3,4,5,6}
print(s3) #结果
{1, 2, 3, 4, 5, 6} #将字符串转换为集合
s1=set('hello')
print(s1) #结果
{'o', 'h', 'e', 'l'} # 这可以体现出集合是无序的 #将列表转换为集合,如果有重复元素,会自动去重
s2=set(['alex','alex','sb'])
print(s2) #结果
{'alex', 'sb'} # 在集合里定义元组
s={1,2,3,4,5,6,("adfa",1232)}
print(s) #结果
{'s', 1, 2, 3, 4, 5, 6, '3', ('adfa', 1232)}

集合的内置函数

add():往集合里添加元素,每次只能添加一个,而update可以一次更新多个值

s.add('s')
s.add('')
s.add(3)
print(s) #结果
{1, 2, 3, 4, 5, 6, 's', ''}

clear():清空集合

s={1,2,3,4,5,6,("adfa",1232)}
s.clear()
print(s) #结果
set()

pop():随机删除集合的元素

s={'sb',1,2,3,4,5,6}
#随机删
s.pop()
print(s) #结果
{2, 3, 4, 5, 6, 'sb'}

remove():从集合里删除指定元素,如果要删除的元素不存在,程序会直接报错

s={'sb',1,2,3,4,5,6}

s.remove('sb')
s.remove('hellol') #删除元素不存在会报错
print(s)

discard():从集合里删除指定元素,如果要删除的元素不存在,程序不会报错

s={'sb',1,2,3,4,5,6}

#指定删除
s.discard('sb')
s.discard('sbbbb')#删除元素不存在不会报错
print(s)

集合关系运算:交、差、并集

有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
  pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
  linuxs={'wupeiqi','oldboy','gangdan'} (1)intersection(self, *args, **kwargs):求交集   
符号表示法: A & B
pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'} # 求出即报名python又报名linux课程的学员名字集合
# for循环方法
py_and_linux = []
for item in pythons:
if item in linuxs:
py_and_linux.append(item)
print(py_and_linux) # 用集合的方法---交集
s = pythons.intersection(linuxs)
print(s)
print(pythons & linuxs) #结果
['wupeiqi', 'gangdan']
{'wupeiqi', 'gangdan'}
{'wupeiqi', 'gangdan'}

(1-1) intersection_update(self, *args, **kwargs):

( 2 ) union():求并集

符号表示法: A | B

pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'} # 求出所有报名的学生名字集合
print(pythons.union(linuxs))
print(pythons|linuxs) #结果
{'wupeiqi', 'biubiu', 'gangdan', 'alex', 'oldboy', 'yuanhao', 'egon'}
{'wupeiqi', 'biubiu', 'gangdan', 'alex', 'oldboy', 'yuanhao', 'egon'}

(2-2)

(3)difference(self, *args, **kwargs):求差集  A - B ,就是要从A里去掉既再在A里又在B里的人=A里剩下的人(只在A里有,不在B里的人)

符号表示法: A - B

pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'} # 求出只报名python课程的学员名字
print('差集',pythons - linuxs)
print(pythons.difference(linuxs)) # 结果
差集 {'alex', 'egon', 'yuanhao', 'biubiu'}
{'alex', 'egon', 'yuanhao', 'biubiu'} # 求出只报名linux课程的学员名字
print('差集',linuxs-pythons)
print(linuxs.difference(pythons)) # 结果
差集 {'oldboy'}
{'oldboy'}

(3-3) difference_update(self, *args, **kwargs): A-B先求差集得到结果,然后又把这个得到的结果赋值给A,即 A = A -B

pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'} pythons.difference_update(linuxs)
print(pythons)

# 相当于
pythons = pythons - linuxs
print(pythons)
# 结果
{'egon', 'biubiu', 'alex', 'yuanhao'} Pythons 原来是{'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'},求差集后把pythons的值更新为{'egon', 'biubiu', 'alex', 'yuanhao'}了

(4)  symmetric_difference(self, other)  :交差补集, 先把两个集合合并到一起,然后去掉两个集合都有的公有的部分

符号表示法: A ^ B

pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
#交叉补集
print('交叉补集',pythons.symmetric_difference(linuxs))
print('交叉补集',pythons^linuxs) #结果
交叉补集 {'biubiu', 'egon', 'yuanhao', 'alex', 'oldboy'}
交叉补集 {'biubiu', 'egon', 'yuanhao', 'alex', 'oldboy'}

isdisjoint(self, *args, **kwargs) : 判断两个集合是否存在共有部分,如果存在返回FALSE,不存在返回TRUE

s1={1,2}
s2={2,3,5}
s3 = {4,6,7}
print(s1.isdisjoint(s2))
print(s1.isdisjoint(s3)) # 结果
False
True

issubset(self, *args, **kwargs):判断A集合是否是B集合的子集 ,是,返回True, 不是,返回 Flase

符号表示: A <= B

s1={1,2}
s2={1,2,3}
print(s1.issubset(s2))#s1 是s2 的子集 True
print(s1 <= s2) # True
print(s2.issubset(s1))#s2 是s1 的子集 False
print(s2 <= s1) # False

issuperset(self, *args, **kwargs): 判断A是不是B的父集,是返回True, 不是 范湖 FALSE

符号表示: A >=B

s1={1,2}
s2={1,2,3} print(s2.issuperset(s1))#s1 是s2 的父集 True
print(s2 >= s1 ) # True print(s1.issuperset(s2))#s1 是s2 的父集 False
print(s1 >= s2) # False

update(self, *args, **kwargs) : A.update(B)  将B的值更新到A

s1={1,2}
s2={1,2,3}
s1.update(s2) #更新多个值
s1.update([3,4],(5,6)) # 可以更新列表,元组的值到集合里
print(s1) #结果
{1, 2, 3, 4, 5, 6}

集合本来是可变类型的,但是集合还有一种定义方式,通过  frozenset() 定义不可变类型的集合

通过frozenset()方法定义的不可变集合,连add()和update()方法都没有的。

s=frozenset('hello')
print(s) # 结果
frozenset({'o', 'h', 'l', 'e'})

通过集合对列表进行简单的去重,不考虑列表的顺序是否改变

names=['alex','alex','wupeiqi']

names=list(set(names))
print(names) # 结果
['wupeiqi', 'alex']
												

第九篇 Python数据类型之集合的更多相关文章

  1. 【转】Python数据类型之“集合(Sets)与映射(Mapping)”

    [转]Python数据类型之“集合(Sets)与映射(Mapping)” 一.集合类型(Sets) 集合对象是不同的(不可重复)hashable对象的无序集合.常见用法包括:成员关系测试.移除序列中的 ...

  2. Python笔记_第一篇_面向过程_第一部分_5.Python数据类型之集合类型(set)

    集合!Python中的集合数据基本上是为了方便数学计算使用的. 什么是集合? 集合就是“确定的一堆东西”.集合里面的东西叫做元素. 特点:1. 集合里面是没有重复的元素的.           2. ...

  3. 7、python数据类型之集合set

    数据类型之集合setset 不允许重复的无序集合,不能通过下标取值,因为无序1.创建   创建空集合   s ={} 默认类型为字典,所以不是空集合,空集合如下   s = set()   s = { ...

  4. 【Python之路】第九篇--Python基础之线程、进程和协程

    进程与线程之间的关系 线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除.线程可与属于同一进程的其它线程共享进程所拥有的全 ...

  5. python 数据类型之集合

    一.集合的定义: 定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key. 特性:集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值 二 ...

  6. Python数据类型-8 集合set

    集合set set集合是一个无序不重复元素的集,基本功能包括关系测试和消除重复元素.集合使用大括号({})框定元素,并以逗号进行分隔.但是注意:如果要创建一个空集合,必须用 set() 而不是 {} ...

  7. Python—数据类型之集合(Set)

    1.集合是一个无序的,且不重复元素的集合.它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的. 2.基本功能包括关系测试和消除重复元素.注意:集合存在的意义就是去 ...

  8. Python数据类型之“集合(Sets)与映射(Mapping)”

    一.集合类型(Sets) 集合对象是不同的(不可重复)hashable对象的无序集合.常见用法包括:成员关系测试.移除序列中的重复.以及科学计算,例如交集.并集.差分和对称差分.通俗点来说,集合是一个 ...

  9. Python基础-python数据类型之集合(四)

    集合 集合是一个无序的,不重复的数据组合,基本功能包括关系测试和消除重复元素. 集合对象还支持 union,intersection,difference和 sysmmetric difference ...

随机推荐

  1. P1272

    P1272 重建道路 题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟 ...

  2. 调用jquery的resize方法改变div的宽度和高度在IE中不变,在谷歌中可以正常显示

    1.jquery代码: 1.1问题的版本: $(function() { haituheight(); $(window).resize(function(){ haituheight(); }); ...

  3. Vue nodejs商城项目-商品的分页、排序、筛选

    .分页 ,要查第3页的数据,则跳过2*8条数据,然后返回8条数据. 在实现滚动加载时,页面刚一加载完成并不需要请求所有数据,当用户下拉到页面底部时,再去请求数据并拼接到商品数据列表中. 通过vue-i ...

  4. 为什么IP检验和发现错误直接丢弃而不是要求源站重发

    纠错控制由上层(传输层)执行IP首部中的源站地址也可能出错,请错误的源地址重传数据报是 没有意义的

  5. iOS之UITableView中的cell因为重用机制导致新的cell的数据出现重复或者错乱

      UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,当cell滚 ...

  6. Percona-Tookit工具包之pt-show-grants

      Preface       User privileges regulation is pretty important in DBAs routine job.As we all know,it ...

  7. jquery点击li 获取当前父节点所在类的索引

    jquery点击li 获取当前父节点所在类的索引 $('.jbcz').find('.content li').click(function(){ //alert($('.jbcz').find('. ...

  8. Python函数中的参数

    形参:形式参数 实参:实际参数 1.普通参数:严格按照顺序将实参赋值给形参. 2.默认参数:必须放置在参数列表的最后. 3.指定参数:将实参赋值给制定参数. 4.动态参数: *:默认将传入的参数,全部 ...

  9. hack游戏攻略(黑吧安全吧的黑客闯关游戏)古墓探秘

    2019.2.11 这个是找到的一个黑客游戏,就是一关一关,挺像ctf的,玩玩也挺有意思,还能涨知识. 地址:http://hkyx.myhack58.com/ 入口: 入口就是这样的.提示是 图内有 ...

  10. Python自动化运维——系统进程管理模块

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 模块:psutil psutil是一个跨平台库,可以很轻松的为我们实现获取系统运行的进程和资源利用率等信息. 功能 ...