高性能マークによって与えられたエレガントな方法に若干のバリエーション:
Select[Tuples[{a, b, c, d}, 3], OrderedQ]
順列はもう少し汎用性があります(ただし、あなたが探している?)例えば
:
Select[Permutations[
[email protected]@ConstantArray[{a, b, c, d}, {3}], {2, 3}], OrderedQ]
は次のようになります。
編集:もちろん
Select[Tuples[[email protected]{a, b, d, c}, 3], OrderedQ]
は、おそらく優れている
編集-2
、ケースを使用することもできます。たとえば、
Cases[Permutations[
[email protected]@ConstantArray[{a, b, d, c}, {3}], {2, 3}], _?OrderedQ]
Edit-3
リストに繰り返し要素が含まれる場合、2つの方法が異なります。 からの出力、例えば、(または所望されなくてもよい)重複を含むであろう(アプローチ2)以下:
Select[Tuples[{a, b, c, d, a}, 3], OrderedQ]
それらは容易に処分したことができる
:
[email protected][Tuples[{a, b, c, d, a}, 3], OrderedQ]
ザ「真」と評価されたが、次の(1アプローチ(ハイパフォーマンスマーク法)によって生成されるリスト2に近づくために提示されたリストから重複要素を削除、および並べ替え:
lst = RandomInteger[9, 50];
Select[[email protected]@Tuples[lst, 3], OrderedQ] ==
[email protected][Map[Sort, Tuples[lst, 3]]]
トンがそうであるように彼は従う(アプローチ2の出力から重複を取り除き、アプローチ1の出力をソートする):
lst = RandomInteger[9, 50];
[email protected][[email protected][lst, 3], OrderedQ] ==
[email protected][Map[Sort, Tuples[lst, 3]]]
ごめんなさい!
'Sort [#]&'は 'Sort'と同じです。 – dreeves
@dreeves - d'oohhhh - それに応じて編集します。ありがとうございました。 –
UnionをDeleteDuplicatesに置き換えてもよいが、与えられた優雅な方法に対しては利点がない。 (サブセットはKSubsetsに相当するMathematica 7です)。 Map/Sortを使わずに上記を行うことは可能ですか? – tomd