在python中,普通集合是可变数据类型

通过以下案例说明:

>>> s = {1, 2, 3, 4}
>>> id(s)
2108634636808
>>> s.add(5)
>>> s
{1, 2, 3, 4, 5}
>>> id(s)
2108634636808

在增加集合中的元素后,集合内存地址并没有改变,说明集合是可变数据类型

集合的重要特点是去重:

>>> s = {1, 2, 2, 3}
>>> s
{1, 2, 3}

集合的操作

常见之增删改:

>>> s = {1, 2, 3, 4, 5, 6}              
>>> s.add(7)                         #增加   
>>> s
{1, 2, 3, 4, 5, 6, 7}
>>> s.discard(8)                       #discard删除不存在的元素不会报错
>>> s
{1, 2, 3, 4, 5, 6, 7}
>>> s.discard(7)
>>> s
{1, 2, 3, 4, 5, 6}
>>> s.remove(8)                       #remove删除不存在的元素会报错
Traceback (most recent call last):
File "<pyshell#233>", line 1, in <module>
s.remove(8)
KeyError: 8
>>> s.remove(6)
>>> s
{1, 2, 3, 4, 5}
>>> s.pop()
1
>>> s
{2, 3, 4, 5}

>>> s.update({1,2,3})                    #批量增加并自动去重
  >>> s
  {1, 2, 3, 4, 5}

>>> s.clear()                         #清空集合元素

>>> s

set()

#集合没有查询功能

集合的重要功能,关系测试:

>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 4, 5, 9}
#s1中有而s2中没有的
>>> s1 - s2
{1, 3}
>>> s1.difference(s2)
{1, 3}
#S1和s2的并集
>>> s1 | s2
{1, 2, 3, 4, 5, 9}
>>> s1.union(s2)
{1, 2, 3, 4, 5, 9}
#S1和s2的交集
>>> s1 & s2
{2, 4}
>>> s1.intersection(s2)
{2, 4}
#s1和s2的对称差集(并集-交集):
>>> s1.symmetric_difference(s2)
{1, 3, 5, 9}
#将s1-s2结果赋给s1  
>>> s1.difference_update(s2)
>>> s1
{1, 3}
#将s1,s2的交集赋给s1
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 4, 5, 9}
>>> s1.intersection_update(s2)
>>> s1
{2, 4}
#将s1,s2的对称差集赋给s1
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 4, 5, 9}
>>> s1.symmetric_difference_update(s2)
>>> s1
{1, 3, 5, 9}

集合的关系判断

>>> s1 = {1, 2}
>>> s2 = {1, 2, 3}
>>> s1.issubset(s2) #A是否是B的子集
True
>>> s2.issuperset(s1) #A是否是B的父级
True
>>> s1 <= s2       #简写形式
True
>>> s1.isdisjoint(s2) #判断A和B是否不相交
False

下面简单认识一下不可变集合----frozenset:

>>> s = {1, 2, 3, 4}
>>> s1 = frozenset(s)
>>> s1
frozenset({1, 2, 3, 4})

通过frozenset函数将集合变成不可变集合,显然不可变集合就没了上面普通集合的增删操作,而仅仅保留关系测试和关系判断的操作,使用方法同上。

python中的集合的更多相关文章

  1. python 中的集合set

    python中,集合(set)是一个无序排列,可哈希, 支持集合关系测试,不支持索引和切片操作,没有特定语法格式, 只能通过工厂函数创建.集合里不会出现两个相同的元素, 所以集合常用来对字符串或元组或 ...

  2. Python中的集合类型分类和集合类型操作符解析

    集合类型    数学上,把set称作由不同的元素组成的集合,集合(set)的成员通常被称作集合元素(set elements).    Python把这个概念引入到它的集合类型对象里.集合对象是一组无 ...

  3. python学习之【第七篇】:Python中的集合及其所具有的方法

    1.前言 python中的集合set与列表类似,它们最大的区别是集合内不允许出现重复元素,如果在定义时包含重复元素,会自动去重. 集合是无序的,集合中的元素必须是不可变类型.集合可以作为字典的key. ...

  4. 14.python中的集合

    什么是集合?正如其字面的意思,一堆东西集中合并到一起.乍一听貌似和容器没什么差别,嗯,好吧,集合也算是一种容器. 在学习这个容器有什么不同之前,先看看集合是如何创建的: a = set() #可变集合 ...

  5. 8、python中的集合

    集合是python中无序.可变的数据结构.集合与字典类似,集合中的元素必须是可哈希的(等同于字典中的键),也就是说集合中的元素是唯一.不可变的数据类型.这里前面说集合可变,后面又说集合中的元素不可变是 ...

  6. python中的集合、元组和布尔

    #元组,元组跟列表一样,只不过列表可读可写,而元组一般用来只读,不修改#python中不允许修改元组的数据,也包括不能删除其中的元素. t1 = ('a','b','c','d','s','a') & ...

  7. Python 中的集合 --set

    前言 在Python中,我们用[]来表示列表list,用()来表示元组tuple,那{}呢?{}不光可用来定义字典dict,还可以用来表示集合set. 集合 set 集合(set)是一个无序的不重复元 ...

  8. python 中的集合(set) 详解

    在Python set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种. 创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方 ...

  9. python中set集合

    一.set集合的特性 访问速度快 天生解决重复问题 二.set变量申明 s1 = set() s2 = set([1,2,3]) 备注:第二种方式在set类中直接传入一个序列. 三.set类中方法大全 ...

随机推荐

  1. EMQ消息队列初体验

    使用命令创建admin用户,密码123 emqx_ctl users add admin 配置规则/etc/emqx/acl.conf(除管理员,其他用户只能订阅限定的测试主题路径) %% 允许'ad ...

  2. webview之如何设计一个优雅健壮的Android WebView?(下)(转)

    转载:https://iluhcm.com/2018/02/27/design-an-elegant-and-powerful-android-webview-part-two/ (这篇文章写得有点晚 ...

  3. NPOI 导出Excel部分

    ) { MessageBox.Show("没有找到相关的数据!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.I ...

  4. 序列化模块_pickle

    序列化: 把不能够直接存储的数据变成字节流(bytes)保存在文件, 进行持久化存储 反序列化: 任何数据都可以转成字节流(bytes)进行存储: 1. dumps 把任意对象序列化 li = [1, ...

  5. 安装Git Bash图文教程

    1.下载Git Bash,下载地址 https://pan.baidu.com/s/1sllsi0d 2.双击Git-2.9.2-64-bit.exe,运行,进行安装:点击“Next” 3.设置安装路 ...

  6. 打包时,node内存溢出问题解决方法

    在使用npm run build打包时,遇到node内存溢出问题. 网上查找到的决绝方案.解决方案一: 安装increase-memory-limit插件,扩大node的内存限制 但是,这个解决方案在 ...

  7. jmeter联合selenium webdriver进行自动化测试-简单1

    jmeter进行webdriver测试 背景:jmeter可以联合selenium进行基本的UI自动化进行测试,解放了手工测试的压力.那么selenium webdriver完成GUI的流程初步如下 ...

  8. Visual Studio中定义OVERFLOW不能用

    在Visual Studio中对OK.ERROR.OVERFLOW进行宏定义,但只有OVERFLOW不能正常使用为什么呢? #define OK 1: #define ERROR 0: #define ...

  9. Java的注解总结

    java 1.5开始引入了注解和反射,正确的来说注解是反射的一部分,没有反射,注解无法正常使用,但离开注解,反射依旧可以使用.Java的注解详解和自定义注解: https://blog.csdn.ne ...

  10. PHP超全局变量$_SERVER分析

    $_SERVER 是一个包含了诸如头信息(header).路径(path).以及脚本位置(script locations)等等信息的数组.这个数组中的项目由 Web 服务器创建.不能保证每个服务器都 ...