python集合类型
集合类型简介
集合也是容器,其内元素都是无序、唯一、不可变的。它常用来做成员测试、移除重复数据、数据计算(比如交集、并集、差集)。
集合Set是dict的无value版。集合也使用大括号包围:
>>> s = {'a','b','c'}
>>> type(s)
<class 'set'>
Set中的元素和dict一样也是通过hash值来存储的:将元素hash()得到hash值,存储到Set中。所以,Set中的元素必须是不可变数据(例如列表不能放进集合中)。但集合自身是可变的,可以修改其中的元素。此外,python提供了另一种不可变的集合类型frozenset。
使用大括号或set()构造方法可以构造集合。
s = {'a','b','c'}
s = set("abc")
s = frozenset("abc")
需要注意的是,空的{}表示的字典,而不是集合,如果想要构造空集合,可以使用不带参数的set()来构造。
由于集合是通过hash值来存储的,没有位置索引。所以没法对集合进行单元素的检索,只能对集合进行修改操作,或迭代、遍历。
集合运算操作
>>> x = set("abcde")
>>> y = set("defgh")
>>> z = set("opq")
>>> x
{'b', 'e', 'c', 'a', 'd'}
>>> y
{'e', 'h', 'f', 'g', 'd'}
集合的运算有交集、并集、差集等操作。它们都有两种方式:操作符号版的,方法函数版的。符号版的都只能集合对集合,函数版的可以集合和其它比较,比如列表。
交集&或intersection()方法:
>>> x & y
{'e', 'd'}
>>> x.intersection(y)
{'e', 'd'}
>>> x & ["a", "c"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for &: 'set' and 'list'
>>> x.intersection(["a","c"])
{'c', 'a'}
并集|或union()方法:
>>> x | y
{'b', 'e', 'h', 'c', 'a', 'f', 'g', 'd'}
>>> x | y | z
>>> x.union(y)
>>> x.union(["x", "y"])
>>> x.union(["x", "y"], ["o", "p"])
差集-或difference():
>>> x-y
{'c', 'a', 'b'}
>>> y-x
{'g', 'f', 'h'}
>>> x.difference(y)
{'c', 'a', 'b'}
>>> y.difference(x)
{'g', 'f', 'h'}
还有XOR操作,取集合1、集合2中非交集的部分:
>>> x ^ y
{'f', 'a', 'h', 'b', 'c', 'g'}
>>> x.symmetric_difference(y)
下面是测试两个集合之间是否是子集、真子集、超集的关系,s1和s2都是集合。同样,使用函数版的可以是其它类型。
# 子集
s1 <= s2
s1.issubset(s2)
s1.issubset(other_type)
# 真子集
s1 < s2
# 超集
s1 >= s2
s1.issuperset(s2)
s1.issuperset(other_type)
# 真超集
s1 > s2
s1.isdisjoint(other_type)测试集合和另一个数据容器(如集合、列表)是否存在相交数据。即集合中的元素和其它容器是否有共同数据,如果有则返回False,否则返回True。
>>> x.isdisjoint(y)
False
>>> x.isdisjoint(z)
True
>>> x.isdisjoint(list("ab"))
False
>>> x.isdisjoint(list("opq"))
True
集合基本操作
集合类型(不是frozenset)是可变的容器类型,可以修改它(但没法检索它)、测试、迭代它,但不能检索它(除非迭代、遍历)。
s1.add(elem)添加元素到集合s1中。因为集合中的元素都唯一,所以添加已存在的元素不会有任何效果,但也不会报错。
s1.remove(elem)移除集合s1中的元素。
s1.pop()随机移除一个元素并返回这个元素。
s1.clear()清空集合。
s1.discard(elem)移除已存在的某个元素,如果不存在则无视(返回None)。
s1.copy()拷贝(浅拷贝)集合s1。
len(s1)返回集合s1长度。
i in s1测试元素i是否在集合s1中。
除了这些基本操作外,还有基于集合运算的修改操作。
取得并集后覆盖集合s1:
s1.update(*others)
s1 |= other |...
取得交集后覆盖集合s1:
s1.intersection_update(*others)
s1 &= other & ...
取得差集后覆盖集合s1:
s1.difference_update(*others)
s1 -= other |...
取得XOR运算后的结果覆盖集合s1:
s1.symmetric_difference_update(other)
s1 ^= other
集合解析
到目前为止,各种解析表达式的方式已经很清晰了。所以看示例即可:
>>> {x for x in 'abcde'}
{'b', 'e', 'c', 'a', 'd'}
>>> {c*2 for c in "abcde"}
{'ee', 'bb', 'cc', 'dd', 'aa'}
python集合类型的更多相关文章
- Python集合类型的操作与应用
Python集合类型的操作与应用 一.Python集合类型 Python中的集合类型是一个包含0个或多个数据项的无序的.不重复的数据组合,其中,元素类型只能是固定数据类型,如整数.浮点数.字符串.元组 ...
- 代码与图详解性能之Python集合类型(list tuple dict set generator)
Python内嵌的集合类型有list.tuple.set.dict. 列表list:看似数组,但比数组强大,支持索引.切片.查找.增加等功能. 元组tuple:功能跟list差不多,但一旦生成,长度及 ...
- 遇见Python集合类型
Python目前有两种内置集合类型,set和frozenset. Ⅰ.两者区别 set是可变的,没有哈希值,其内容可以使用add()和remove()这样的方法来改变,所以不能被用作字典的键或其他集合 ...
- python集合类型set
set 类型的简单粗暴取出并集合交集 | & li=[11,22,33] n_li=[44,55] b= (list(set(li)&set(n_li))) b2=set(li) ...
- 《Python核心编程》 第七章 映射和集合类型 - 习题
课后习题 7–1. 字典方法.哪个字典方法可以用来把两个字典合并到一起? 答: dict1 = {' :' python' } dict2 = {' :"hello" } dict ...
- python set type 集合类型的数据介绍 (set frozenset)
python支持数学中的集合概念,如:通过in,not in 可以检查某元素是否在,不在集合中. python有两种集合类型,set(可以变的,不能哈希,不能用作字典的key),frozenset ...
- Python核心编程(第七章)--映像和集合类型
字典:它是一个容器类型,能存储任意个数的Python对象,也包括其他容器类型,Python的字典是作为可变的哈希表实现的 映像类型中的数据是无序排列的 可以用工厂方法dict()来创建字典,也可以 ...
- Python基础-字符串、集合类型、判断、深拷贝与浅拷贝、文件读写
字符串 1.定义三个变量: 2.交换两个变量值 1)引入第三个变量: 2)Python引入第三方变量: 3)不引入第三方变量: 3. isalpha 是否是汉字或字母 4.Isalnum 是否是汉字 ...
- 第二百九十九节,python操作redis缓存-SortSet有序集合类型,可以理解为有序列表
python操作redis缓存-SortSet有序集合类型,可以理解为有序列表 有序集合,在集合的基础上,为每元素排序:元素的排序需要根据另外一个值来进行比较,所以,对于有序集合,每一个元素有两个值, ...
随机推荐
- Unity3D中AssetBundle应用
工程中的模型等资源转化为Prefab后,打包成AssetBundle,可以大幅降低资源的空间占有度,并且提高资源加载的效率. 一.AssetBundle的打包 先看下打包Prefab的脚本代码,这段脚 ...
- restful状态码常用
在进行后端接口API封装的过程中,需要考虑各种错误信息的输出.一般情况下,根据相应问题输出适合的HTTP状态码,可以方便前端快速定位错误,减少沟通成本. HTTP状态码有很多,每个都有对应的含义,下面 ...
- mysql几种中间件对比
网上找到的图 重点比较几个 1.atlas 基于mysql-proxy,360团队 优点: 配置简单,支持读写分离 缺点: 年份久,功能有限 地址:https://github.com/Qihoo36 ...
- 基于ajax提交数据
昨日回顾: 1 inclusion_tag -干什么用的?生成html的片段(动态,传参数,传数据) -app下新建一个模块,templatetags -创建一个py文件(mytag.py) -fro ...
- nginx的锁
一.原理 nginx的锁是基于共享内存实现的,这点跟redis中利用一个存储(也就是一个键值对)来实现锁的原理是一致的,每一项操作通过检查锁对象的lock域是否为0,来判断能否获取锁并尝试获取锁. 二 ...
- XML生成XAMl扩展
所有的WPF控件列为枚举 代码如: 1 public enum ControlType 2 { 3 Window_Resources, 4 Page_Resources, 5 Grid, 6 Stac ...
- vue.js 2.0(2)
1.双向绑定v-model要写在输入框里 2.点击改变颜色:当index和isActive统一时,才会调用class html: function: css: 3.在同一 ...
- SpringMVC框架出现 405 request method post not supported 的解决方法
在SpringMVC框架中当使用post请求服务,然后请求成功转到一个静态文件,如html,htm等网页时.页面出现405 request method post not supported错误,只要 ...
- 阿里技术分享:阿里自研金融级数据库OceanBase的艰辛成长之路
本文原始内容由作者“阳振坤”整理发布于OceanBase技术公众号. 1.引言 OceanBase 是蚂蚁金服自研的分布式数据库,在其 9 年的发展历程里,从艰难上线到找不到业务场景濒临解散,最后在双 ...
- JAVA对象 向上转型upcasting,向下转型downcasting
1:向上转型 向上转型,就是java多态中的父类引用指向子类对象.但要注意的是 父类引用不可以访问子类新增加的成员(属性和方法) 代码举例: /** * 定义一个父类 */ public class ...