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