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

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类型-集合的更多相关文章

  1. Python的集合

    1. Python的集合 1.1 集合的定义 在Python中, 集合set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.Python中的集合set类 ...

  2. python类型学习

    python类型学习 标准类型 数字 Integer 整型 Boolean 布尔型 Long integer 长整型 Floating point real numer  浮点型 Complex nu ...

  3. 1. python 类型和运算

    类型和运算 (Types and Operations) Introducing Python Object Types 在非正式的意义上, 在 Python 中, 我们用一些东西做事情. " ...

  4. python set集合(16)

    在python变量中除了以前文章所提到的整形int / 浮点数float / 布尔值bool / 列表list / 字典dict 之外,还有一个类型我们还没有做详细介绍,这个变量类型就是集合set. ...

  5. python frozenset集合(17)

    在前一篇文章中我们对 python set集合 做了详细的讲解,而本文讲解的 frozenset集合 其实和set集合类似!区别在于frozenset集合不能修改/添加/删除,其他功能和set集合一样 ...

  6. Python数据类型--集合(set)

    Python的集合是无序.可迭代的容器对象,所有元素放在一对大括号中{},元素之间使用逗号隔开,同一集合内的元素具有唯一性,不允许重复. 集合中只能包含数字.字符串.元组等不可变类型的数据,不能包含列 ...

  7. 攻城狮在路上(壹) Hibernate(十)--- 映射值类型集合

    一.映射Set(集):未排序,无重复. 实例代码: <set name="images" table="IMAGES" lazy="true&q ...

  8. Python 3 集合基础和概念!

    Python 3 集合基础和概念! Python 3中,集合是无序的,所以不能进行切片和索引操作. 创建集合有两个方法:set()方法创建的集合是可变的,可被迭代的:frozenset()方法创建的集 ...

  9. 将泛类型集合List类转换成DataTable

    /// <summary> /// 将泛类型集合List类转换成DataTable /// </summary> /// <param name="list&q ...

随机推荐

  1. TransactionDefinition接口中定义了七个事务传播行为

    1.PROPAGATION_REQUIRED如果存在一个事务,则支持当前事务,如果没有事务则开启一个新的事务.使用spring声明式事务,spring使用AOP来支持声明式事务,会根据事务属性,自动在 ...

  2. ASP.NET MVC API以及.Core API进行安全拦截和API请求频率控制

    安全拦截思路: 根据IP以及请求次数,该IP超过规定请求次数,就有很大可能是非正常用户进行的请求(比如WEB攻击),这时候进行拦截,拦截成功会提示:The allowed number of requ ...

  3. 使用PAC file结合ATS控制访问

    介绍:前面已经介绍了ATS的安装和PAC文件的写法格式,现在把nginx端口转发,pac file访问控制和ATS代理结合起来分别控制不同的机器访问不同URL权限的目的 效果如下 一.使用nginx端 ...

  4. 有关call和apply、bind的区别及this指向问题

    call和apply都是解决this指向问题的方法,唯一的区别是apply传入的参数除了其指定的this对象之外的参数是一个数组,数组中的值会作为参数按照顺序传入到this指定的对象中. bind是解 ...

  5. AutoCad 二次开发 Jig操作之墙块的拖动

    测试结果: 主要思路:选择一段多段线,使用封装的jig类进行实时拖动,其原理就是在拖动的时候,确定被拖动的边,我是选择离输入第一个点最近的边作为拖动边,有了这条边,就能确定需要实时更改的点了,然后当鼠 ...

  6. 图解Go语言的context了解编程语言核心实现源码

    基础筑基 基于线程的编程语言中的一些设计 ThreadGroup ThreadGroup是基于线程并发的编程语言中常用的一个概念,当一个线程派生出一个子线程后通常会加入父线程的线程组(未指定线程组的情 ...

  7. Ceph14.2.5 RBD块存储的实战配置和详细介绍,不看后悔! -- <3>

    Ceph RBD介绍与使用 RBD介绍 RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型.RBD块设备类似磁盘可以被挂载. RBD块设备具有快照.多副本.克隆 ...

  8. 「BZOJ1385」「Baltic2000」Division expression 解题报告

    Division expression Description 除法表达式有如下的形式: \(X_1/X_2/X_3.../X_k\) 其中Xi是正整数且\(X_i \le 1000000000(1 ...

  9. 小小知识点(三十六)EXCEL闪退解决办法

    1. 首先打开控制面板,从系统和安全中选择管理工具打开Windows事件查看器 2. 点击展开Windows日志-->应用程序.然后在右侧列表中找到出现的错误(点击后,查看下面的信息就知道是不是 ...

  10. git stash使用

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/daguanjia11/article/ ...