Lassen Sie A
und B
Listen werden. Ich sollte alle Paare finden {x,y}
für die x
ist in A
, y
ist in B
und einige Bedingung Cond[x,y]
ist wahr. Dies ist, was ich habe kommen mit, aber es ist ziemlich umständlich, und ich vermute, dass es ein besserer Weg,Effizienter Weg, Paare zu finden, die eine bestimmte Bedingung erfüllen
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];
]
Zum Beispiel ist
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}}
Mein anderes Problem mit diesem Code ist, dass es nicht verallgemeinern leicht. Ich möchte eine Funktion haben, die A1, A2,...,An
und eine Bedingung Cond[x___]
in Listen nimmt und gibt alle n-Tupel {x1,x2,...,xn}
für die x1
in A1
ist ... xn
ist in An
und Cond[x1,x2,...,xn]
ist wahr.
Und schließlich, gibt es eine eingebaute Funktion, die die cartesian product von zwei oder mehr Listen berechnet?
Danke!
Ah! 'Tuples' ist genau das, was ich brauchte (habe die Hilfedateien nicht genau genug gelesen). Vielen Dank! – MarkV