Пусть A
и B
будут списками.Я должен был найти все пары {x,y}
, для которых x
в A
, y
в B
и некоторое условие Cond[x,y]
верно.Это то, что я придумал, но это довольно громоздко, и я подозреваю, что есть лучший способ
AllPairs[A_, B_, Cond_] := Module[{i, k, C, Cp},
C = {};
For[i = 1, i <= Length[A], i++,
Cp = Select[B, Cond[A[[i]], #] &];
C = C~Join~Table[{A[[i]], Cp[[k]]}, {k, 1, Length[Cp]}];
];
Return[C];
]
Например
In[1]:= AllPairs[{1, 2, 3, 4}, {3, 4, 5}, EvenQ[#1 + #2] &]
Out[1]:= {{1, 3}, {1, 5}, {2, 4}, {3, 3}, {3, 5}, {4, 4}}
Моя другая проблема с этим кодом заключается в том, чтоэто не обобщает легко.Я хотел бы иметь функцию, которая принимает в списки A1, A2,...,An
и некоторые условия Cond[x___]
и выводит все n кортежей {x1,x2,...,xn}
, для которых x1
находится в A1
... xn
находится в An
иCond[x1,x2,...,xn]
верно.
И, наконец, есть ли встроенная функция, которая вычисляет декартово произведение из двух или более списков?
Спасибо!