1

Python では、再帰を使用せずに、また itertools パッケージを使用せずに、n 回繰り返される同じセットのデカルト積を生成する汎用関数を作成するにはどうすればよいですか? この関数は、set と n 回の 2 つのパラメーターを取る必要があります。

例えば:

set1={'a','b'}
print({(x,y) for x in set1 for y in set1})

{('a', 'b'), ('b', 'a'), ('b', 'b'), ('a', 'a')}

print({(x,y,z) for x in set1 for y in set1 for z in set1})

{('b', 'a', 'b'), ('a', 'b', 'a'), ('a', 'a', 'a'), ('b', 'a', 'a'), ('a', 'a', 'b'), ('b', 'b', 'a'), ('b', 'b', 'b'), ('a', 'b', 'b')}

だけでなく:

set2={'a','b','c'}
print({(x,y,z) for x in set2 for y in set2 for z in set2})
print({(w,x,y,z) for w in set2 for x in set2 for y in set2 for z in set2})

4

3 に答える 3

1
def cartesian(A,n):
    tmp1,tmp2 = [],[[]]
    for k in range(n):
        for i in A:
            tmp1.extend([j+[i] for j in tmp2])
        tmp1,tmp2 = [],tmp1
    return tmp2

[In:1] A = [1,2,3] ; n = 1
[Out:1] [[1], [2], [3]]

[In:2] A = [1,2,3] ; n = 4
[Out:2] [[1, 1, 1], [2, 1, 1], [3, 1, 1], [1, 2, 1], [2, 2, 1], [3, 2, 1], [1, 3, 1], 
[2, 3, 1], [3, 3, 1], [1, 1, 2], [2, 1, 2], [3, 1, 2], [1, 2, 2], [2, 2, 2], 
[3, 2, 2], [1, 3, 2], [2, 3, 2], [3, 3, 2], [1, 1, 3], [2, 1, 3], [3, 1, 3], 
[1, 2, 3], [2, 2, 3], [3, 2, 3], [1, 3, 3], [2, 3, 3], [3, 3, 3]]
于 2013-07-20T16:08:26.230 に答える