等价类#
- equivalence_classes(iterable, relation)[源代码]#
返回将
relation
应用于iterable
时产生的等价类。等价类或块,由来自
iterable
的、彼此等价的对象组成。如果relation
函数接收该类的任意两个对象时返回True
,否则返回False
,则它们被定义为等价。为了定义等价关系,该函数必须是自反、对称和传递的。- 参数:
- 返回:
- frozenset 的集合
一个由 frozenset 组成的集合,表示等价关系函数
relation
在iterable
元素上引起的划分。返回集合中的每个成员集合表示划分的一个等价类或块。重复元素将被忽略,因此
iterable
最好是一个set
。
注意
此函数不检查
relation
是否表示一个等价关系。您可以使用is_partition
检查您的等价类是否提供了一个划分。示例
假设
X
是从0
到9
的整数集合,并考虑X
上的模3
同余等价关系R
:这意味着X
中的两个整数x
和y
在关系R
下等价,如果它们除以3
后余数相同,即(x - y) mod 3 = 0
。这个关系的等价类是
{0, 3, 6, 9}
,{1, 4, 7}
,{2, 5, 8}
:0
,3
,6
,9
都能被3
整除,余数为零;1
,4
,7
余数为1
;而2
,5
和8
余数为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})}