【问题标题】:Get the cartesian product of a series of tables in Python获取Python中一系列表的笛卡尔积
【发布时间】:2013-11-21 19:21:11
【问题描述】:

如何从一组表中获取笛卡尔积?

我知道如何获得 列表 的笛卡尔积。我用:

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

【问题讨论】:

  • 你能提供一些你想做的输入/输出示例吗?我很难想象得到除一维序列以外的任何东西的笛卡尔积意味着什么。
  • 哦,好吧,让我更新一下问题
  • 相反,你是如何存储表格的!
  • 好的表已更新...感谢 Zero323 !
  • 在您的示例中,表 1 X 列中的 3 发生了什么?

标签: python cartesian-product


【解决方案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']]

【讨论】:

  • python 列表太棒了! ;)
【解决方案2】:
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')

【讨论】:

  • 你有一个错字。它应该是zip(*t) 而不是zip(*arr)
【解决方案3】:
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

【讨论】:

    猜你喜欢
    • 2023-02-19
    • 2021-06-18
    相关资源
    最近更新 更多