equivalence_classes#
- equivalence_classes(iterable, relation)[source]#
返回将
relation
应用于iterable
时的等价类。等价类或块由
iterable
中的对象组成,这些对象都是等价的。它们被定义为等价,如果relation
函数在传递该类中的任意两个对象时返回True
,否则返回False
。要定义等价关系,函数必须是自反的、对称的和传递的。- Parameters:
- Returns:
- set of frozensets
由等价关系函数
relation
在iterable
元素上诱导的分区的集合。返回集合中的每个成员集表示一个等价类或块。重复元素将被忽略,因此
iterable
为set
时最有意义。
Notes
此函数不检查
relation
是否表示等价关系。你可以使用is_partition
检查你的等价类是否提供分区。Examples
设
X
为从0
到9
的整数集合,并考虑X
上的等价关系R
,即模3
的同余关系:这意味着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})}