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'}
转载于:https://www.cnblogs.com/f-ck-need-u/p/10159413.html
python集合类型相关推荐
- Python集合类型详解(一)——集合定义与集合操作符
今天继续给大家介绍Python相关知识,本文主要内容是Python集合类型定义与集合操作符. 一.集合类型定义 在Python中,集合是一种非常重要的组合数据类型.Python中的集合与数学中的集合非 ...
- python集合类型的四种操作符_深入解析Python中的集合类型操作符
(1)标准类型操作符(所有的集合类型) 成员关系 (in, not in) 就序列而言,Python中的in和not in操作符决定某个元素是否是一个集合中的成员. 集合等价/不等价 等价/不等价被用 ...
- python集合类型的四种操作符_python:集合【全用法】
python中有列表.元组.集合.字典这四种可以存放多个数据元素的集合,他们在总体功能上都起着存放数据的作用,却都有着各自的特点.本片文章中我们会对集合的用法做详细说明. 演示环境: python3. ...
- python集合类型一般应用的场景包括_Python学习,数据类型,python,篇
集合 集合类型定义 集合就是多个元素的无序组合,在python中集合类型与数学中的集合概念一致,集合元素间具有无序性,互异性,唯一性.集合的元素不可更改并且不能是可变的数据类型. python中集合用 ...
- python集合类型应用场景_python学习笔记(10)--组合数据类型(集合类型)
集合类型 集合是多个元素的无序组合,每个元素唯一,不存在相同类型,每个元素是不可变类型.用{}表示,元素间用逗号分隔.建立结合类型用{},或set函数,如果是空集合必须用set. >>&g ...
- python集合类型中的元素是有序的_python基础篇:很有意思的数据类型,集合(set) 常用去去重...
Python集合(set),是一个很有意思的数据结构.从形式上看,它像字典有key但没有value,它的写法是这样的s = {'a', 'b', 'c'},是不是像一个没有value的字典?另一方面, ...
- python集合类型_python集合类型介绍
我们在学习数学的时候学过集合这个概念,在Python中同样存在一种名叫集合的数据类型,它也是用来保存不重复的元素,简单的说,集合就是包含了一些唯一存在的元素. 元素有以下几个特性: 1) 无序性,集合 ...
- python集合类型_Python 的集合(set)类型
本文简单介绍了Python语言里set类型自带的方法,set类型表示元素和集合的从属关系(membership),和列表等序列相比,最大的特点是无序.可以跟数学里的集合概念完全对应起来. 目录 概念 ...
- python集合类型的操作符_Python 语言学习 第一篇:数据类型(数字,集合,布尔类型,操作符)...
Python语言最常用的对象是变量和常量,常量的值是字面意思,变量的值是可变的,例如,123,"上海"是常量,而a=1,a=2,其中a是变量名.内置的核心数据类型有:数字.字符串. ...
- python集合类型运算符_Python 数据类型和运算符
算术运算符 算术运算 + 加 - 减 * 乘 / 除 % 取余(相除后的余数) ** 取幂(注意 ^ 并不执行该运算,你可能在其他语言中见过这种情形) // 相除后向下取整到最接近的整数 关于按位运算 ...
最新文章
- 经验分享:微信小程序外包接单常见问题及流程
- 人脸对齐--Pose-Invariant Face Alignment with a Single CNN
- AI产业链分布图曝光:1040个玩家,BAT率先步入应用
- [linux] SIGPIPE信号处理
- SpringBoot初步入门
- JavaScript|拖拽|仿Android手机九点连线开锁
- Python练习-基于socket的FTPServer
- 使用XMLSerializerNamespace类生成受限的名称
- UIAutomation识别UI元素
- 前端学习(1932)vue之电商管理系统电商系统之tree树形控件
- 编程加速服务器_FPGA加速驱动新时代的数据洪流,下篇
- “遗留代码是传奇!”
- logback error 分开存日志
- tfs 解除锁定命令
- VC2013配置OpenCV开发环境
- linux修改文件内容未显示完,LInux下修改 ~/.bashrc 文件source ~/.bashrc 后 shell 命令 失效 任何命令都显示 “ bash XX :未找到命令”...
- 原生JS实现视频播放功能
- go语言宕机(panic)——程序终止运行
- sketch如何在手机中预览
- (新)Chrome浏览器自定义背景插件