equivalence_classes#

equivalence_classes(iterable, relation)[source]#

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

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

Parameters:
iterablelist, tuple, 或 set

元素/节点的可迭代对象。

relationfunction

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

Returns:
set of frozensets

由等价关系函数 relationiterable 元素上诱导的分区的集合。返回集合中的每个成员集表示一个等价类或块。

重复元素将被忽略,因此 iterableset 时最有意义。

Notes

此函数不检查 relation 是否表示等价关系。你可以使用 is_partition 检查你的等价类是否提供分区。

Examples

X 为从 09 的整数集合,并考虑 X 上的等价关系 R ,即模 3 的同余关系:这意味着 X 中的两个整数 xyR 下等价,如果它们除以 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})}