等价类#

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

返回将 relation 应用于 iterable 时产生的等价类。

等价类或块,由来自 iterable 的、彼此等价的对象组成。如果 relation 函数接收该类的任意两个对象时返回 True,否则返回 False,则它们被定义为等价。为了定义等价关系,该函数必须是自反、对称和传递的。

参数:
iterablelist, tuple, or set

元素/节点的 iterable。

relationfunction

一个布尔值函数,实现 iterable 元素上的等价关系(自反、对称、传递的二元关系)——它必须接受两个元素,如果它们相关则返回 True,否则返回 False

返回:
frozenset 的集合

一个由 frozenset 组成的集合,表示等价关系函数 relationiterable 元素上引起的划分。返回集合中的每个成员集合表示划分的一个等价类或块。

重复元素将被忽略,因此 iterable 最好是一个 set

注意

此函数不检查 relation 是否表示一个等价关系。您可以使用 is_partition 检查您的等价类是否提供了一个划分。

示例

假设 X 是从 09 的整数集合,并考虑 X 上的模 3 同余等价关系 R:这意味着 X 中的两个整数 xy 在关系 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 并传入 XR 的函数实现来看到这一点。

>>> 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})}