equivalence_classes#

equivalence_classes(iterable, relation)[源代码]#

返回的等价类 relation 当应用于 iterable

等价类或块由来自的对象组成 iterable 它们都是等同的。它们被定义为等价的,如果 relation 函数返回 True 当传递来自该类的任何两个对象时,以及 False 否则的话。要定义等价关系,函数必须是自反的、对称的和可传递的。

参数
iterable列表、元组或集合

元素/节点的可迭代。

relation功能

在的元素上实现等价关系(自反、对称、传递的二元关系)的布尔值函数 iterable -它必须接受两个元素并返回 True 如果它们是相关的,或者 False 如果不是的话。

返回
冻结集集合

表示由等价关系函数诱导的划分的冻结集集合 relation 关于要素的问题 iterable 。返回集中的每个成员集代表分区的等价类或块。

重复的元素将被忽略,因此它对 iterable 成为一个 set

笔记

此函数不会检查 relation 表示等价关系。您可以使用以下命令检查等价类是否提供了分区 is_partition

实例

让我们 X 是来自的整数集 09 ,并考虑一种等价关系 R 在……上面 X 同余模上的 3 :这意味着两个整数 xy 在……里面 X 在下是等价的 R 如果它们除以后剩下的余数相同 3 ,即 (x - y) mod 3 = 0

此关系的等价类为 {{0, 3, 6, 9}}{{1, 4, 7}}{{2, 5, 8}}0369 都可以被整除 3 并留下零余数; 147 留下剩余部分 1 ;同时 258 留下剩余部分 2 。我们可以通过打电话来了解这一点 equivalence_classes 使用 X 和一个函数实现 R

>>> X = set(range(10))
>>> def mod3(x, y): return (x - y) % 3 == 0
>>> equivalence_classes(X, mod3)    
{frozenset({1, 4, 7}), frozenset({8, 2, 5}), frozenset({0, 9, 3, 6})}