如何从一组表格中获取笛卡尔积?
我知道如何获得列表的笛卡尔积。我用:
import itertools
for element in itertools.product(*somelists):
print element
我无法将其转换为查找两个或更多表的笛卡尔积。
编辑:
示例:
Table 1;
X: 1, 2, 4
A: a, b, d
Table 2;
X : 2,3,5
B : x,y,v
输出:
X: 1,1,1,2,2,2,4,4,4
A: a,a,a,b,b,b,d,d,d
X: 2,3,5,2,3,5,2,3,5
B: x,y,v,x,y,v,x,y,v
您可以在此处找到更直观的示例: http://web.utk.edu/sas/OnlineTutor/1.2/en/60477/m71/m71_3.htm
答案 0 :(得分:1)
假设:
X A
1 a
2 b
4 d
X B
2 x
3 y
5 v
需要做什么:
from pprint import pprint
t1 = [[1,'a'],[2,'b'],[4,'d']]
t2 = [[2,'x'],[3,'y'],[5,'v']]
t3 = []
for i1 in t1:
for i2 in t2:
i3 = i1 + i2
t3.append(i3)
pprint(t3)
结果:
[[1, 'a', 2, 'x'],
[1, 'a', 3, 'y'],
[1, 'a', 5, 'v'],
[2, 'b', 2, 'x'],
[2, 'b', 3, 'y'],
[2, 'b', 5, 'v'],
[4, 'd', 2, 'x'],
[4, 'd', 3, 'y'],
[4, 'd', 5, 'v']]
答案 1 :(得分:0)
t1 = [ [1,2,4], 'abd' ]
t2 = [ [2,3,5], 'xyv' ]
def transpose(t):
return zip(*t)
transpose(t1)
=> [(1, 'a'), (2, 'b'), (4, 'd')]
for e1, e2 in itertools.product(transpose(t1), transpose(t2)):
print e1 + e2 # concatenate the two tuples
(1, 'a', 2, 'x')
(1, 'a', 3, 'y')
(1, 'a', 5, 'v')
(2, 'b', 2, 'x')
(2, 'b', 3, 'y')
(2, 'b', 5, 'v')
(4, 'd', 2, 'x')
(4, 'd', 3, 'y')
(4, 'd', 5, 'v')
答案 2 :(得分:0)
from itertools import product
t1 = { 'X' : [1, 2, 4], 'A': ['a','b', 'd'] }
t2 = { 'X' : [2, 3, 5], 'B': ['x','y','v'] }
tables = [ t1, t2 ]
for rows in product([0, 1, 2], [0, 1, 2]):
print ", ".join(str(d[rows[i]])
for (i, t) in enumerate(tables)
for d in t.values())
给出:
a, 1, 2, x
a, 1, 3, y
a, 1, 5, v
b, 2, 2, x
b, 2, 3, y
b, 2, 5, v
d, 4, 2, x
d, 4, 3, y
d, 4, 5, v