让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]
是正确的。
最后,是否有内置函数计算两个或多个列表的 cartesian product?
谢谢!
啊! “元组”正是我所需要的(没有仔细阅读帮助文件)。谢谢! – MarkV 2010-11-19 01:44:56