python类型-集合
集合对象是一组无序排列的可哈希的值,集合成员可以做字典的键。集合有两种类型:可变集合,可以添加和删除元素,可变集合不是可哈希的,不能用作字典的键也不能作为其它集合中的元素;不可变集合相反,有哈希值,可用作字典的键或作为集合中的一个成员。

1.创建集合类型和给集合赋值
集合创建的唯一方法-用集合的工厂方法set()和frozenset()
>>> s = set('cheeseshop')
>>> s
set(['c', 'e', 'h', 'o', 'p', 's'])
>>> t = frozenset('bookshop')
>>> t
frozenset(['b', 'h', 'k', 'o', 'p', 's'])
>>> type(s)
<type 'set'>
>>> len(s)
6
>>> len(t) == len(s)
True
>>> s == t
False
2.访问集合中的值
可以遍历查看集合成员或检查某项元素是否是一个集合中的成员。
>>> s
set(['c', 'e', 'h', 'o', 'p', 's'])
>>> 'k' in s
False
>>> for i in s:
... print i,
...
c e h o p s
3.更新集合
用各种集合内建的方法和操作符添加和删除集合的成员。
>>> s
set(['c', 'e', 'h', 'o', 'p', 's'])
>>> s.add('z')
>>> s
set(['c', 'e', 'h', 'o', 'p', 's', 'z'])
>>> s.update('pypi')
>>> s
set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y', 'z'])
>>> s.remove('z')
>>> s
set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y'])
>>> s -= set('pypi')
>>> s
set(['c', 'e', 'h', 'o', 's'])
4.删除集合
令集合超出它的作用范围,或调用del将他们直接清除出当前的名称空间。
>>> del s
5.集合类型操作符
5.1.标准类型操作符(所有的集合类型)
成员关系(in,not in):某个元素是否是一个集合中的成员;
集合等价/不等价:两个集合相等是指对每个集合而言,当且仅当其中一个集合中的每个成员同时也是另一个集合中的成员,也可以说每个集合必须是另一个集合的子集,即s<=t和t<=s的值均为真(True),集合等价/不等价与集合的类型或集合成员的顺序无关,只与集合的元素有关。
>>> s
set(['c', 'e', 'h', 'o', 'p', 's'])
>>> t
frozenset(['b', 'h', 'k', 'o', 'p', 's'])
>>> s == t
False
>>> set('posh') == set('shop')
True
子集/超集:Set用python的比较操作符检查某集合是否是其他集合的超集或子集。"小于"符号(<,<=)用来判断子集,"大于"符号(>,>=)用来判断超集。
>>> set('shop') < set('cheeseshop')
True
>>> set('bookshop') >= set('shop')
True
5.2.集合类型操作符(所有的集合类型)
联合(|):联合(union)操作和集合的OR等价,两个集合的联合是一个新集合,该集合中的每个元素都至少是其中一个集合的成员。联合有一个等价的方法,union()
>>> s
set(['c', 'e', 'h', 'o', 'p', 's'])
>>> t
frozenset(['b', 'h', 'k', 'o', 'p', 's'])
>>> s | t
set(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])
>>>
交集(&):交集操作比作集合的AND(或合取)操作,两个集合的交集是一个新集合,该集合中的每个元素同时是两个集合中的成员,即属于两个集合的成员。交集符号有一个等价的方法,intersection()。
>>> s
set(['c', 'e', 'h', 'o', 'p', 's'])
>>> t
frozenset(['b', 'h', 'k', 'o', 'p', 's'])
>>> s & t
set(['h', 's', 'o', 'p'])
差补/相对补集(-):两个集合(s和t)的差补或相对补集是指一个集合C,该集合中的元素,只属于集合s,而不属于集合t。差符号有一个等价的方法,difference()
set(['c', 'e', 'h', 'o', 'p', 's'])
>>> t
frozenset(['b', 'h', 'k', 'o', 'p', 's'])
>>> s - t
set(['c', 'e'])
对称差分(^):对称差分是集合的XOR(又称"异或"),两个集合(s和t)的对称差分是指另一个集合C,该集合中的元素,只能是属于集合s或集合t的成员,不能同时属于两个集合,对称差分有一个等价的方法,symmetric_difference()
>>> s
set(['c', 'e', 'h', 'o', 'p', 's'])
>>> t
frozenset(['b', 'h', 'k', 'o', 'p', 's'])
>>> s ^ t
set(['b', 'e', 'k', 'c'])
混合集合类型操作:如果两个操作数的类型相同,即都是可变集合或不可变集合,则所产生的结果类型是相同的,如果左右两个操作数的类型不相同(左操作数是set,右操作数是frozenset,或相反情况),则所产生的结果类型与左操作数的类型相同。
>>> s
set(['c', 'e', 'h', 'o', 'p', 's'])
>>> t
frozenset(['b', 'h', 'k', 'o', 'p', 's'])
>>> s | t
set(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])
>>> t | s
frozenset(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])
5.3.集合类型操作符(仅适用于可变集合)
(union)Update(|=):从已存在的集合中添加(可能多个)成员,和update等价
>>> s = set('cheeseshop')
>>> u = frozenset(s)
>>> s |= set('pypi')
>>> s
set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y'])
Retention/Intersection Update(&=):保留(或交集更新)操作保留与其他集合的共有成员。此方法和intersection_update()等价。
>>> s
set(['p', 'c', 'e', 'h', 's', 'o'])
>>> s &= set('shop')
>>> s
set(['h', 's', 'o', 'p'])
>>>
Difference Update(-=):对集合s和t进行差更新操作s -= t,差更新操作会返回一个集合,该集合中的成员是集合s去除掉集合t中元素后剩余的元素。此方法和difference_update()等价。
>>> s
set(['p', 'c', 'e', 'h', 's', 'o'])
>>> s -= set('shop')
>>> s
set(['c', 'e'])
Symmetric Difference Update(^=):对集合s和t进行对称差分更新操作(s^=t)会返回一个集合,该集合中的成员仅是原集合s或另一个集合t中的成员。此方法和symmetric_difference_update()等价。
>>> s
set(['p', 'c', 'e', 'h', 's', 'o'])
>>> t = frozenset('bookshop')
>>> s ^= t
>>> s
set(['c', 'b', 'e', 'k'])
6.内建函数
len():返回集合的基数(或元素的个数)
6.1.集合类型工厂函数
set()和frozenset():set()生成可变集合,frozenset()生成不可变集合,不提供参数,生成空集合;参数必须是可迭代的,即一个序列或迭代器,或支持迭代的对象,例如一个文件或字典。
6.2.集合类型内建方法
6.2.1.方法(所有的集合方法)
|
方法名称 |
操作 |
|
s.issubset(t) |
如果s是t的子集,则返回True,否则返回False |
|
s.issuperset(t) |
如果t是s的超集,则返回True,否则返回False |
|
s.union(t) |
返回一个新集合,该集合是s和t的并集 |
|
s.intersection(t) |
返回一个新集合,该集合是s和t的交集 |
|
s.difference(t) |
返回一个新集合,该集合是s的成员,但不是t的成员 |
|
s.symmetric_difference |
返回一个新集合,该集合是s或t的成员,但不是s和t共有的成员 |
|
s.copy() |
返回一个新集合,该集合是s的浅复制 |
6.2.2.方法(仅适用于可变集合)
|
方法名称 |
操作 |
|
s.update(t) |
用t中的元素修改s,即s现在包含 |
|
s.intersection_update() |
s中的成员是共同属于s和t的元素 |
|
s.symmetric_difference_update(t) |
s中的成员更新为那些包含在s或t中,但不是s和t共有的元素 |
|
s.add(obj) |
在集合s中添加对象obj |
|
s.remove(obj) |
从集合s中删除对象obj,如果obj不是集合s中的元素(obj not in s),将引发KeyError错误。 |
|
s.discard(obj) |
如果obj是集合s中的元素,从集合s中删除对象obj |
|
s.pop() |
删除集合s中的任意一个对象,并返回它 |
|
s.clear() |
删除集合s中的所有元素 |
附录:集合类型总结表
|
函数/方法名 |
等价操作符 |
说明 |
|
所有集合类型 |
||
|
len(s) |
集合基数:集合s中元素的个数 |
|
|
set([obj]) |
可变集合工厂函数:obj必须是支持迭代的,由obj中的元素创建集合,否则创建一个空集合 |
|
|
frozenset([obj]) |
不可变集合工厂函数:执行方式和set()相同,但它返回的是不可变集合 |
|
|
obj in s |
成员测试:obj是s中的一个元素吗? |
|
|
obj not in s |
非成员测试:obj不是s中的一个元素吗? |
|
|
s == t |
等价测试,测试s和t是否具有相同的元素? |
|
|
s != t |
不等价测试,与==相反 |
|
|
s < t |
(严格意义上)子集测试:s!=t且s中所有的元素都是t的成员 |
|
|
s.issubset(t) |
s <= t |
子集测试(允许不严格意义上的子集):s中所有的元素都是t的成员 |
|
s > t |
(严格意义上)超集测试:s!=t且t中所有的元素都是s的成员 |
|
|
s.issuperset(t) |
s >= t |
超集测试(允许不严格意义上的超集):t中所有的元素都是s的成员 |
|
s.union(t) |
s | t |
合并集合:s或t中的元素 |
|
s.intersection(t) |
s & t |
交集操作:s和t中的元素 |
|
s.difference(t) |
s – t |
差分操作:s中的元素,而不是t中的元素 |
|
s.symmetric_difference |
s ^ t |
对称差分操作:s或t中的元素,但不是s和t共有的元素 |
|
s.copy() |
复制操作:返回s的浅复制副本 |
|
|
仅用于可变集合 |
||
|
s.update(t) |
s |= t |
(Union)修改操作:将t中的成员添加到s |
|
s.intersection_update(t) |
s &= t |
交集修改操作:s中仅包括s和t中共有的成员 |
|
s.difference_update(t) |
s -= t |
差修改操作:s中包括仅属于s但不属于t中的成员 |
|
s.symmetric_difference_update(t) |
s ^= t |
对称差分修改操作:s中包括仅属于s或仅属于t中的成员 |
|
s.add(obj) |
加操作:将obj添加到s |
|
|
s.remove(obj) |
删除操作:将obj从s中删除,如果s中不存在obj,将引发KeyError |
|
|
s.discard(obj) |
丢弃操作:remove()的友好版本,如果s中存在obj,从s中删除它 |
|
|
s.pop() |
pop操作:移除并返回s中的任意一个元素 |
|
|
s.clear() |
消除操作:移除s中的所有元素 |
|
python类型-集合的更多相关文章
- Python的集合
1. Python的集合 1.1 集合的定义 在Python中, 集合set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.Python中的集合set类 ...
- python类型学习
python类型学习 标准类型 数字 Integer 整型 Boolean 布尔型 Long integer 长整型 Floating point real numer 浮点型 Complex nu ...
- 1. python 类型和运算
类型和运算 (Types and Operations) Introducing Python Object Types 在非正式的意义上, 在 Python 中, 我们用一些东西做事情. " ...
- python set集合(16)
在python变量中除了以前文章所提到的整形int / 浮点数float / 布尔值bool / 列表list / 字典dict 之外,还有一个类型我们还没有做详细介绍,这个变量类型就是集合set. ...
- python frozenset集合(17)
在前一篇文章中我们对 python set集合 做了详细的讲解,而本文讲解的 frozenset集合 其实和set集合类似!区别在于frozenset集合不能修改/添加/删除,其他功能和set集合一样 ...
- Python数据类型--集合(set)
Python的集合是无序.可迭代的容器对象,所有元素放在一对大括号中{},元素之间使用逗号隔开,同一集合内的元素具有唯一性,不允许重复. 集合中只能包含数字.字符串.元组等不可变类型的数据,不能包含列 ...
- 攻城狮在路上(壹) Hibernate(十)--- 映射值类型集合
一.映射Set(集):未排序,无重复. 实例代码: <set name="images" table="IMAGES" lazy="true&q ...
- Python 3 集合基础和概念!
Python 3 集合基础和概念! Python 3中,集合是无序的,所以不能进行切片和索引操作. 创建集合有两个方法:set()方法创建的集合是可变的,可被迭代的:frozenset()方法创建的集 ...
- 将泛类型集合List类转换成DataTable
/// <summary> /// 将泛类型集合List类转换成DataTable /// </summary> /// <param name="list&q ...
随机推荐
- 2018.11.2浪在ACM集训队第三次测试赛
2018.11.2 浪在ACM 集训队第三次测试赛 整理人:孔晓霞 A 珠心算测试 参考博客:[1]李继朋 B 比例简化 参考博客: [1]李继朋 C 螺旋矩阵 参考博客:[1]朱远迪 D 子矩阵 ...
- hihocoeder1384
hihocoeder1384 算法竞赛进阶指南上的题目 我们肯定是吧最大值和最小值匹配,次大值和次小值匹配以此类推 首先,类似于区间覆盖的思想,我们对于一个\(L\),找到最大的满足条件的\(R\) ...
- C# 大端小端转换
关于大端和小端,是一个有趣的问题.本文告诉大家如何在C#转换大端和小端. 这里有一个有趣的故事,请看详解大端模式和小端模式 - CSDN博客 默认的 C# 使用的是小端,如果收到的消息是大端,那么就会 ...
- JQ绑定事件的叠加和解决,index()方法的坑
JQ绑定事件的叠加和解决,index()方法的坑 前言 在做过几个不大不小的项目后,发现技术这种东西,必须要多多实践,才能发现各种问题,理论的知识掌握的再好终究是纸上谈兵. 因此目前感觉有两点是必须要 ...
- lnmp一键安装,安装php时失败
查看安装日志 直接cd进入根目录报错内容:configure: error: mcrypt.h not found. Please reinstall libmcrypt 解决办法如下#使用wget可 ...
- etcd配置文件详解
一 示例yml配置文件 # This is the configuration file for the etcd server. # Human-readable name for this mem ...
- django框架(2)
cookie和session 1.cookie不属于http协议范围, 由于http协议无法保持状态, 但实际情况, 我们却又需要"保持状态",因此cookie就是在这样一个场景下 ...
- kotlin + springboot启用elasticsearch搜索
参考自: http://how2j.cn/k/search-engine/search-engine-springboot/1791.html?p=78908 工具版本: elasticsearch ...
- 洛谷$P1600$ 天天爱跑步 树上差分
正解:树上差分 解题报告: 传送门$QwQ$! 这题还挺妙的,,,我想了半天才会$kk$ 首先对一条链$S-T$,考虑先将它拆成$S-LCA$和$LCA-T$,分别做.因为总体上来说差不多接下来我就只 ...
- 洛谷$P2053\ [SCOI2007]$修车 网络流
正解:网络流 解题报告: 传送门$QwQ$ 一个很妙的建图,,,说实话我麻油想到$QwQ$ 考虑对每个工人建$n$个点,表示这是他修的倒数第$i$辆车,就可以算出影响是$t\cdot i$,然后对每辆 ...