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

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. 【2016常州一中夏令营Day1】

    Problem 1. suffix给定一个单词,如果该单词以 er. ly 或者 ing 后缀结尾,则删除该后缀(题目保证删除后缀后的单词长度不为 0),否则不进行任何操作.Input输入一行,包含一 ...

  2. tensorflow学习笔记——ResNet

    自2012年AlexNet提出以来,图像分类.目标检测等一系列领域都被卷积神经网络CNN统治着.接下来的时间里,人们不断设计新的深度学习网络模型来获得更好的训练效果.一般而言,许多网络结构的改进(例如 ...

  3. Android studio 使用git仓库记录

    studio 绑定git settings --> verson control -->git 在项目文件目录右击打开git bash here操作界面 查看git项目安装位置 找到id_ ...

  4. 今天IT告告诉我,我电脑上的java jdk属性收费滴!需卸载

    敲着代码,IT突然跑来说,你电脑的Jdk版本属于收费版,目前需要卸载!啊哦...手贱!每次有更新我都更新了,Java要收费老早之前耳闻了,但是俺很少做java,一般都在.Net,所以忽略鸟.. 于是G ...

  5. Qt configure 参数说明(中文)

    Qt configure 在编译QT前,可加各种参数来定制自己想要的QT库.这对需要裁减QT库的朋友来说非常重要.对于如何编译QT,可以参考:http://hi.baidu.com/agassi%5F ...

  6. QT中加载动态链接库

    一.添加第三方的头文件 这个问题再简单不过了,不过我还是要说下. 首先,添加头文件  #include "ControlCAN.h" 然后,再将这个头文件放到工程的目录下,就OK了 ...

  7. JSR303 数据检验

    原文:https://blog.csdn.net/qq_28867949/article/category/7370730 一.JSR-303简介 JSR-303 是 JAVA EE 6 中的一项子规 ...

  8. Vijos1035 贪婪的送礼者 [map的应用]

    1.题意:一群人之间每人准备了一些钱互相送(你们好无聊(⊙o⊙)…),数据给出了每人准备的金额与送出的对象,且保证送给每人的金额是平均的,最后要求出每个人收到的比送出的钱多的数目. 2.分析:模拟题, ...

  9. 第二阶段:2.商业需求分析及BRD:4.产品需求分析总结

    产品的需求筛选 战略定位要考虑公司的战略问题.产品定位要分阶段,各个阶段的需求不同. 其实现在需求分析跟筛选都是非常快的. 不把需要当成需求,意思就是不要用户说需要什么就是什么,用户需要引导. 先分类 ...

  10. tag的使用

    tag = True while tag: print("level") choice = input("level>>>").strip() ...