讓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