Set集合[可变]是一个无序的,不重复的数据组合,它的主要作用如下:

1. 去重,把一个列表变成集合,就自动去重了

2. 关系测试,测试两组数据之前的交集、差集、并集等关系

集合(set):把不同的元素组成一起形成集合,是python基本的数据类型。

集合分类:可变集合、不可变集合

可变集合(set):可添加和删除元素,非可哈希的[但是要求自己的元素是可Hash的],不能用作字典的键,也不能做其他集合的元素

不可变集合(frozenset):与上面恰恰相反

创建结合:

      利用set()/ frozenset()创建,且元素必须是不可变的,利用大括号{}输出包装

# 错误的创建
s = set('a', 1, 'b')
print(s) # TypeError: set expected at most 1 arguments, got 3 li = [1, 2, 'a', 'b']
s = set(li) # 列表变为集合
print(s) # {1, 2, 'a', 'b'} li2 = [1, 2, 1, 'a', 'a']
s = set(li2)
print(s) # 去重后: {1, 2, 'a'} li = [[1, 2,], 'a', 'b']
s = set(li) # 报错,TypeError: unhashable type: 'list' # set
s1 = set('hello')
print(s1) # {'h', 'l', 'o', 'e'}
# frozenset
s2 = frozenset('hhh')
print(s2) # frozenset({'h'})

访问集合

由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not  in来访问或判断集合元素。

s1 = set('hello world')
print('a' in s1) # True
print('b' in s1) # False
# s1[1] #TypeError: 'set' object does not support indexing
# 循环迭代无序输出
for i in s1:
print(i, end='\t') # e w o r d l h
# 直接输出
print(s1) # {'h', 'w', 'r', 'l', 'o', 'd', 'e', ' '} 输入里面有空格,输出也有空格

更新集合

s.add() :元素作为一个整体添加进去
s.update(): 必须添加的是一个序列,列表[可以理解为添加,但是是一个字符一个字符序列化的添加]
s.remove():删除掉某一个元素
s.pop():删除任何一个元素,因为set集合是无序的,删除的随机性
s.clear(): 清空set里面的值
del set(): 删除set集合

s1 = set('apple')
print("原始set集合 :", s1)
s1.add('samsung')
print("add后的set : ", s1)
s1.update('huawei')
print("update后的set:", s1)
s1.remove('a') # 因为添加的是序列后的单个字符,所以不能直接输入
print("remove后的set:", s1)
s1.pop()
print("pop后的set :", s1)
s1.clear()
print("clear后的set :", s1)
del s1
# print("del后的set :", s1) # 报错 NameError: name 's1' is not defined

集合类型操作符

1   in ,not in
2   集合等价与不等价(==, !=)
3   子集、超集

4   联合(|)操作与集合的or操作其实等价的,联合符号有个等价的方法,union()

子集和超集: 父集必须多于子集和一个字符

S1是S0的父集合: s1.issuperset(s0)  ==> s1 > s0

S0是S1的子集合: s0.issubset(s1)    ==> s0 < s1

s1 = set('applesamsung')
s0 = set('apple')
print("原始set集合[s0] :", s0)
print("原始set集合[s1] :", s1)
print('s1是s0的父集合 :', s1 > s0) # 父集必须多于子集和一个字符
print('s1是s0的issuperset:', s1.issuperset(s0)) # 父集必须多于子集和一个字符
print('s0是s1的父集合 :', s0 < s1) # 父集必须多于子集和一个字符
print('s0是s1的issubset :', s0.issubset(s1)) # 父集必须多于子集和一个字符

交集: s0.intersection(s1)  ==> s0 & s1

并集: s0.union(s1)   ==> s0 | s1

差集: s0.difference(s1)   ==> s0  - s1   【以S0为基础进行对比,in s0 not in s1】

对称差集: s0.symmetric_difference(s1)  ==> s0 ^ s1

s0 = set([1, 2, 3, 4, 5])
s1 = set([4, 5, 6, 7, 8])
print("原始set:s0:", s0)
print("原始set:s1:", s1)
print("【交集】and :", s0.intersection(s1)) # 取出交集
print("【交集】s0&s1:", s0&s1) # 取出交集
print("【并集】 :", s0.union(s1)) # 取出并集
print("【并集】s0|s1:",s0 | s1) # 取出并集
print("【S0差集】 :", s0.difference(s1)) # 以S0为主, in S0 not in S1
print("【差集】s0-s1:", s0-s1) # 以S0为主, in S0 not in S1
print("【S1差集】 :", s1.difference(s0)) # 以S1为主, in S1 not in S0
print("【差集】s1-s0:", s1-s0) # 以S0为主, in S0 not in S1
print("【对称差集】 :", s1.symmetric_difference(s0)) # 除了公共的元素以外的元素
print("【对称差集】s0 ^s1:", s1 ^ s0 ) # 除了公共的元素以外的元素

set集合应用:最简单的去重

'''最简单的去重方式'''
lis = [1,2,3,4,1,2,3,4]
print list(set(lis)) #[1, 2, 3, 4]

 

最新文章

  1. java script第一篇(按钮全选的实现)
  2. 安装cocoapods
  3. Fitbit Flex
  4. php中 -&gt; 和 =&gt; 和 :: 的用法 以及 self 和 $this 的用法
  5. win7中sql2005 连接其它sql2005服务器,连不上
  6. python_way ,day7 面向对象 (初级篇)
  7. IoC~高效的Autofac
  8. mysql基础知识(5)--视图
  9. [POJ] 3468 A Simple Problem with Integers [线段树区间更新求和]
  10. 2_Cat Years
  11. 一步一步重写 CodeIgniter 框架 (4) —— load_class 管理多个对象实例的思路
  12. jsp的自定义标签 控制jsp内容显示
  13. anaconda的fish shell支持
  14. [NOIp 2017]列队
  15. 【Android Studio安装部署系列】十二、Android studio代码混淆
  16. python 基于机器学习识别验证码
  17. 蓝桥杯c/c++省赛真题——日志统计
  18. TCP 之 RST 原因分析
  19. Linux Kafka源码环境搭建
  20. c3p0 配置文件的设置。解决编码乱码问题等

热门文章

  1. Linux下日志文件监控系统Logwatch的使用记录
  2. [转载]java.ByteArrayInputStream与ByteArrayOutputStream再次理解
  3. H5页面JS调试
  4. python中lambda,map,reduce,filter,zip函数
  5. SQL Developer 改成英文
  6. Git命令学习笔记
  7. WEB下渗透测试经验技巧(全)[转载]
  8. [转]angularjs之ui-grid 使用详解
  9. 原创:微信小程序java实现AES解密并获取unionId
  10. RPA流程自动化-UIPath简介