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

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. Linux 内核使用 USB 数据函数

    USB 核心中的几个帮忙函数可用来从所有的 USB 设备中存取标准信息. 这些函数不能从 中断上下文或者持有自旋锁时调用. 函数 usb_get_descriptor 获取指定的 USB 描述符从特定 ...

  2. LuoguP3045牛券Cow Coupons

    LuoguP3045 [USACO12FEB]牛券Cow Coupons 果然我贪心能力还是太差了 ZR讲过的原题我回来对做法没有一丁点印象 有时候有这样一种题目 每个数有两种不同的价值 你可以选择价 ...

  3. 【21.00%】【vijos P1018】智破连环阵

    描述 B国在耗资百亿元之后终于研究出了新式武器--连环阵(Zenith Protected Linked Hybrid Zone).传说中,连环阵是一种永不停滞的自发性智能武器.但经过A国间谍的侦察发 ...

  4. [POJ2528]Mayor's posters(离散化+线段树)

    Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 70365   Accepted: 20306 ...

  5. Java 学习笔记(15)——反射

    Java中的类文件最终会被编译为.class 文件,也就是Java字节码.这个字节码中会存储Java 类的相关信息.在JVM执行这些代码时首先根据 java 命令中指定的类名找到.class 文件然后 ...

  6. 深入Oracle的left join中on和where的区别详解

    -- from http://blog.itpub.net/30175262/viewspace-1472060/ 今天遇到一个求某月所有天数的统计结果,如果某日的结果是0也需要显示出来,即: 日期 ...

  7. 使用Git和Github来管理自己的代码和笔记

    一.Github注册 1.先注册github.com的账号,官方网站: https://github.com/ 2.登录 3.创建仓库,仓库分公开的和私有的,公开的是免费的,私有的是收费的.我现在创建 ...

  8. 分析CPU使用率不断增加的原因

    工程中发现引起的问题: 结合别的朋友的意见,我的优化思路是: 1.排查是否内存泄漏 经过反复查询代码,未发现有内存泄漏(可以自己百度搜索C#内存泄漏的原因).可以通过任务管理器分析是否有内存泄漏,打开 ...

  9. 前端-jQuery介绍

    目录 jQuery介绍 jQuery的优势 jQuery内容: jQuery版本 jQuery对象 jQuery基础语法 查找标签 基本选择器 层级选择器: 基本筛选器: 属性选择器: 表单筛选器: ...

  10. 惊呆了!Java程序员最常犯的错竟然是这10个

    和绝大多数的程序员一样,我也非常的宅.周末最奢侈的享受就是逛一逛技术型网站,比如说 programcreek,这个小网站上有一些非常有意思的主题.比如说:Java 程序员最常犯的错竟然是这 10 个, ...