2013-11-21 1 views
2

Как я могу получить декартово произведение из группы таблиц?Получите декартово произведение серии таблиц в Python

Я знаю, как получить декартовый продукт . Я использую:

import itertools 
for element in itertools.product(*somelists): 
    print element 

У меня возникли проблемы с преобразованием этого в поиск декартова продукта из двух или более таблиц.

EDIT:

Пример:

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

+3

Не могли бы вы предоставить несколько примеров ввода/вывода для того, что вы хотите сделать? Я изо всех сил пытаюсь представить себе, что значит получить декартово произведение каких-то иных, чем одномерных последовательностей. – Kevin

+0

oh okay Позвольте мне уточнить вопрос – user2954367

+1

Что такое таблица? – user2357112

ответ

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') 
+0

у вас есть опечатка. Это должно быть 'zip (* t)', а не 'zip (* arr)'. –

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 
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']] 
+0

списки python настолько удивительны! ;) – samkhan13

 Смежные вопросы

  • Нет связанных вопросов^_^