2

私は辞書を持っています。V が DICT[K] にある場合、someFunc(k, v) と someFunc(v, k) は両方とも true を返します (K は DICT[V] にあります)。辞書は次のようになります。

{
1: [2, 3, 5],
2: [3, 1, 5],
3: [1, 2],
5: [2, 1],
}

この基準に適合する辞書内の特定の長さの数値のすべてのセットを検索したい: someFunc(x, y) と someFunc(y, x) は、辞書内の任意のペアに対して true でなければなりません。たとえば、私が示した辞書の場合:

{1, 2, 3} は有効な長さ 3 のセットです。すべてのアイテムに他のすべてのアイテムが含まれているため、基準は有効である必要があります。

  • dict[1] には 2、3 が含まれます
  • dict[2] には 1、3 が含まれます
  • dict[3] には 1、2 が含まれます

すべての有効なセットに特定の数値が含まれている必要があることがわかっている場合、特定の辞書で特定の長さのすべてのセットを見つける最良の方法は何ですか?

4

1 に答える 1

1
from itertools import combinations
from collections import OrderedDict

def sf(k,v,d):
    return (k in d[v]) and (v in d[k])

def lenN(d, n):
    # create a list of unique items
    l = list(OrderedDict.fromkeys(i for x in d for i in d[x]))
    # collect matching groups
    V = list()
    for C in combinations(l, n):
        for P in combinations(C, 2):
            if not sf(P[0], P[1], d): break
        else: V.append(C)
    return V

d = { 1: [2, 3, 5], 2: [3, 1, 5], 3: [1, 2], 5: [2, 1], }

print lenN(d, 3)

出力

[(2, 3, 1), (2, 5, 1)]
于 2013-05-24T04:56:45.383 に答える