非常教程

Python参考手册

数据类型 | Data Types

sets

2.3版本的新功能。

自2.6版弃用:内置set/ frozenset类型替换此模块。

sets模块提供了用于构建和操作独特元素的无序集合的类。常见用途包括成员资格测试,删除序列中的重复项以及计算交集,联合,差异和对称差异等集合上的标准数学运算。

像其他收藏品,集支持x in setlen(set)for x in set。作为无序集合,集合不会记录元素位置或插入顺序。因此,集合不支持索引,切片或其他类序列行为。

大多数设置的应用程序使用Set提供除了的每种设置方法的类__hash__()。对于需要散列方法的高级应用程序,ImmutableSet该类添加了一个__hash__()方法,但省略了更改该集合内容的方法。双方SetImmutableSet从派生BaseSet,一个抽象类,以确定是否东西是一组非常有用:isinstance(obj, BaseSet)

设置的类是使用字典实现的。因此,设置元素的要求与字典键的要求相同; 即元素定义了两者__eq__()__hash__()。因此,集合不能包含可变元素,如列表或字典。但是,它们可以包含不可变集合,例如元组或实例ImmutableSet。为了方便实现集合集合,内部集合自动转换为不可变形式,例如,Set([Set(['dog'])])转换为Set([ImmutableSet(['dog'])])

class sets.Set([iterable])

构造一个新的空Set对象。如果提供了可选的iterable参数,则使用从迭代获得的元素更新集合。迭代中的所有元素都应该是不可变的,或者可以使用协议自动转换为不可变的部分中描述的协议将其转换为不可变的。

class sets.ImmutableSet([iterable])

构造一个新的空ImmutableSet对象。如果提供了可选的iterable参数,则使用从迭代获得的元素更新集合。迭代中的所有元素都应该是不可变的,或者可以使用协议自动转换为不可变的部分中描述的协议将其转换为不可变的。

由于ImmutableSet对象提供了一种__hash__()方法,因此它们可以用作集合元素或字典键。ImmutableSet对象没有添加或删除元素的方法,因此在调用构造函数时必须知道所有元素。

1.设置对象

实例SetImmutableSet两者都提供以下操作:

手术

当量

结果

只有(一)

集合s中的元素数(基数)

x in s

测试x在s中的成员身份

x不在s中

测试x对于s中的非成员资格

s.issubset(t)的

s <= t

测试s中的每个元素是否在t中

s.issuperset(t)的

s> = t

测试t中的每个元素是否在s中

s.union(t)的

s | Ť

包含s和t元素的新集合

s.intersection(t)的

s&t

与s和t共同的元素的新集合

s.difference(t)的

s - t

在s中有元素的新集合,但不在t中

s.symmetric_difference(t)的

s ^ t

在s或t中有元素的新集合,但不是两者都有

s.copy()

与s的浅拷贝的新的集合

注意,对非运营商的版本union()intersection()difference(),和symmetric_difference()将接受任何迭代器作为参数。相反,他们的基于操作员的对应方要求他们的参数是集合。这排除了易于出错的结构,例如Set('abc') & 'cbs'有利于更具可读性的结构Set('abc').intersection('cbs')

在版本2.3.1中更改:以前所有参数都需要设置。

另外,无论SetImmutableSet支持设置来设置比较。当且仅当每个集合中的每个元素都包含在另一个中(每个元素是另一个的子集)时,两个集合是相等的。当且仅当第一组是第二组的合适子集(是子集,但不相等)时,集合小于另一集合。当且仅当第一个集合是第二个集合的适当超集(是超集,但不相等)时,集合比另一集合大。

子集和等式比较不推广到完整的排序功能。例如,任何两个不相交的集合不相等,并且不彼此的子集,所以所有的以下返回Falsea<ba==b,或a>b。因此,集合不执行该__cmp__()方法。

由于集合只定义了部分排序(子集关系),所以该list.sort()方法的输出对于集合列表是未定义的。

下表列出了可用于ImmutableSet但未在Set以下位置找到的操作:

Operation

结果

哈希(S)

为s返回一个散列值

下表列出了可用于Set但未在ImmutableSet以下位置找到的操作:

手术

当量

结果

s.update(t)的

s | = t

返回从t添加的元素

s.intersection_update(t)的

s&= t

返回集只保留t中的元素

s.difference_update(t)的

s - = t

删除在t中找到的元素后返回集合s

s.symmetric_difference_update(t)的

s ^ = t

使用s或t中的元素返回集合s,但不是两者

s.add(x)的

添加元素x来设置s

s.remove(x)的

从集合s中移除x; 如果不存在,会引发KeyError

s.discard(x)的

如果存在,则从集合s中移除x

s.pop()

从s中移除并返回任意元素; 如果为空则引发KeyError

s.clear()

从集合s中删除所有元素

注意,对非运营商的版本update()intersection_update()difference_update(),和symmetric_difference_update()将接受任何迭代器作为参数。

在版本2.3.1中更改:以前所有参数都需要设置。

还要注意,该模块还包含一个union_update()用于别名的方法update()。包含该方法以实现向后兼容。程序员应该更喜欢这种update()方法,因为它是由内置set()frozenset()类型支持的。

2.例子

>>> from sets import Set
>>> engineers = Set(['John', 'Jane', 'Jack', 'Janice'])
>>> programmers = Set(['Jack', 'Sam', 'Susan', 'Janice'])
>>> managers = Set(['Jane', 'Jack', 'Susan', 'Zack'])
>>> employees = engineers | programmers | managers           # union
>>> engineering_management = engineers & managers            # intersection
>>> fulltime_management = managers - engineers - programmers # difference
>>> engineers.add('Marvin')                                  # add element
>>> print engineers 
Set(['Jane', 'Marvin', 'Janice', 'John', 'Jack'])
>>> employees.issuperset(engineers)     # superset test
False
>>> employees.update(engineers)         # update from another set
>>> employees.issuperset(engineers)
True
>>> for group in [engineers, programmers, managers, employees]: 
...     group.discard('Susan')          # unconditionally remove element
...     print group
...
Set(['Jane', 'Marvin', 'Janice', 'John', 'Jack'])
Set(['Janice', 'Jack', 'Sam'])
Set(['Jane', 'Zack', 'Jack'])
Set(['Jack', 'Sam', 'Jane', 'Marvin', 'Janice', 'John', 'Zack'])

3.自动转换为不可变的协议

集只能包含不可变元素。为了方便起见,可变Set对象被自动复制到一个ImmutableSet被添加为一个集合元素之前。

该机制总是添加可哈希元素,或者如果它不可哈希,则检查该元素以查看它是否具有__as_immutable__()返回不可变等价物的方法。

由于Set对象有一个__as_immutable__()返回实例的方法ImmutableSet,因此可以构造一组集合。

需要散列元素来检查集合中的成员资格的方法__contains__()remove()方法需要类似的机制。这些方法检查的元件为hashability和,如果没有,检查一个__as_temporarily_immutable__()返回通过提供用于临时方法的类包裹元件方法__hash__()__eq__()__ne__()

备用机制不需要构建原始可变对象的单独副本。

Set对象实现了__as_temporarily_immutable__()返回Set由新类包装的对象的方法_TemporarilyImmutableSet

添加可测性的两种机制通常对用户是不可见的; 但是,多线程环境中可能会出现冲突,其中一个线程正在更新一个线程而另一个线程已暂时将其包含在其中_TemporarilyImmutableSet。换句话说,可变集合集不是线程安全的。

4.与内置套件类型比较

内置setfrozenset类型是基于从sets模块中学到的经验教训设计的。主要区别是:

  • SetImmutableSet已更名为setfrozenset
  • 没有相当于BaseSet。相反,使用isinstance(x, (set, frozenset))
  • 对于大多数数据集,内置函数的哈希算法执行效率明显更好(碰撞更少)。
  • 内置版本拥有更多节省空间的泡菜。
  • 内置版本没有union_update()方法。相反,使用相同的update()方法。
  • 内置版本没有_repr(sorted=True)方法。相反,使用内置repr()sorted()功能:repr(sorted(s))
  • 内置版本没有自动转换为不可变的协议。许多人发现这个功能令人困惑,社区中没有人报告说它已经找到了真正的用途。
Python

Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于1991年。 Python 是纯粹的自由软件, 源代码和解释器 CPython 遵循 GPL 协议。Python 语法简洁清晰,特色之一是强制用空白符( white space )作为语句缩进。

主页 https://www.python.org/
源码 https://github.com/python/cpython
版本 2.7
发布版本 2.7.13

Python目录

1.内置常量 | Built-in Constants
2.内置例外 | Built-in Exceptions
3.内置函数 | Built-in Functions
4.内置类型 | Built-in Types
5.编译器 | Compiler
6.加密 | Cryptography
7.数据压缩 | Data Compression
8.数据持久性 | Data Persistence
9.数据类型 | Data Types
10.调试和分析 | Debugging & Profiling
11.开发工具 | Development Tools
12.文件和目录访问 | File & Directory Access
13.文件格式 | File Formats
14.构架 | Frameworks
15.输入 | Importing
16.输入/输出 | Input/ouput
17.国际化 | Internationalization
18.网络 | Internet
19.网络数据 | Internet Data
20.翻译 | Interpreters
21.语言 | Language
22.记录 | Logging
23.Mac OS
24.MS Windows
25.多媒体 | Multimedia
26.联网 | Networking
27.数字与数学 | Numeric & Mathematical
28.操作系统 | Operating System
29.可选操作系统 | Optional Operating System
30.限制执行 | Restricted Execution
31.运行 | Runtime
32.SGI IRIX
33.软件包装与分销 | Software Packaging & Distribution
34.字符串 | String
35.结构化标记 | Structured Markup
36.Tk
37.Unix
38.Python 简介
39.Python pass 语句
40.Python 循环嵌套
41.Python 运算符
42.Python log10() 函数
43.Python log() 函数
44.Python floor() 函数
45.Python fabs() 函数
46.Python exp() 函数
47.Python cmp() 函数
48.Python ceil() 函数
49.Python abs() 函数
50.Python Number(数字)
51.Python pow() 函数
52.Python modf() 函数
53.Python min() 函数
54.Python max() 函数
55.Python asin() 函数
56.Python acos() 函数
57.Python uniform() 函数
58.Python shuffle() 函数
59.Python seed() 函数
60.Python random() 函数
61.Python randrange() 函数
62.Python choice() 函数
63.Python sqrt() 函数
64.Python round() 函数
65.Python radians() 函数
66.Python degrees() 函数
67.Python tan() 函数
68.Python sin() 函数
69.Python hypot() 函数
70.Python cos() 函数
71.Python atan2() 函数
72.Python atan() 函数
73.Python 元组
74.Python 列表(List)
75.Python 字符串
76.Python 字典(Dictionary)
77.Python 日期和时间
78.Python 函数
79.Python 模块
80.Python capitalize()方法
81.Python center()方法
82.Python count() 方法
83.Python expandtabs()方法
84.Python endswith()方法
85.Python encode()方法
86.Python decode()方法
87.Python find()方法
88.Python index()方法
89.Python 异常处理
90.Python isspace()方法
91.Python isnumeric()方法
92.Python islower()方法
93.Python isdigit()方法
94.Python isalpha()方法
95.Python isalnum()方法
96.Python isupper()方法
97.Python istitle()方法
98.Python min()方法
99.Python max()方法
100.Python maketrans()方法