In [1]: def my_relation(x):
...: return x % 3
...:
In [2]: from collections import defaultdict
In [3]: def partition(X, relation):
...: d = defaultdict(list)
...: for item in X:
...: d[my_relation(item)].append(item)
...: return d.values()
...:
In [4]: X = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
In [5]: partition(X, my_relation)
Out[5]: [[3, 6, 9, 12], [1, 4, 7, 10], [2, 5, 8, 11]]
:
from collections import defaultdict
from itertools import combinations
def partition_binary(Y, relation):
d = defaultdict(list)
for (a, b) in combinations(Y):
l = d[my_relation(a, b)]
l.append(a)
l.append(b)
return d.values()
あなたはこのような何か行うことができます。
partition_binary(partition(X, rank), my_relation)
をmy_relationはブール値を返す場合ああ、これは明らかに動作しません。私は最初にこれをやろうとするのが目的だとは思うが、それぞれの同形性を表現するための抽象的な方法を考え出すといいだろう。
あなたはすでにいくつかのコードを自分で書くことを試みたことがありますか?あなたは_Python等価クラスをgoogledしましたか? – moooeeeep
'itertools.groupby'は、任意の値から各等価クラスの標準要素を計算できる場合に便利です。 – chepner
@chepner私はそれが問題で興味深いと思いますが、それは等価クラスによる仕様です。ところで、あなたが知っているように、 'groupby'はそれらを分類する必要があります - 現在の定式化のもう一つの困難。 –