2011-01-20 14 views
6

nazdrovje(hereを参照)によって指摘されているように、[email protected]を使用して、リスト内の各要素のランクを取得できます。リストに繰り返し要素が含まれている場合でも、結果はn -permutation(繰り返しなしの整数1〜nの順序付きリストとなります)であり、最下位の要素には1が割り当てられ、2番目に低い2に割り当てられます。 Andrzej Kozlowskiにより、以下が(もhere参照)を保持する。Ordering @ Ordering and Ranking Permutations

([email protected])[[[email protected]@mylist]]==mylist 

Iは最高ランク要素がその1、第最高 2、等は、割り当てられたランキング順列を生成したいです以下が成立する。

([email protected]@mylist)[[newPermutation]]==mylist 

これは単純なようですが、私はかなり厄介な解決策を思いついただけです。現時点では次のようにしています。

newPermutation= [email protected][[email protected]@mylist,All,Greater] 

もっとエレガントで直感的な方法がありますか?確かにあるはずですか?

例:

mylist= {\[Pi],"abc",40,1, 300, 3.2,1}; 

[email protected]@mylist 

[email protected][[email protected]@mylist,All,Greater] 

出力(順列との相互関係に注意してください)

{7,6,4,1,5,3,2} 
{1,2,4,7,3,5,6} 

(いずれも以下のTrueに評価)

[email protected])[[[email protected]@mylist]]== mylist 
[email protected]@mylist)[[ [email protected][[email protected]@mylist,All,Greater]]]== mylist 

答えて

4

あなたは

を設定した場合
oldPerm = [email protected]@mylist 

その後、

newPerm = - oldPerm + [email protected] + 1 

([email protected]@mylist)[[newPerm]]==mylist 

ので True


である、あなたは

を定義することができこのような

([email protected]@mylist)[[newPerm[mylist]]] == mylist 
として

は非常にいいですそれTrue

+0

です!ありがとうございました。私は一種の解決法を持っていたので質問を投稿するかどうか議論していました。私は今やとてもうれしいです。 – tomd

+0

@TomD In Mma _Thereは常に別の方法です_と、時には一番簡単な方法が見つからないことがあります。ここのコミュニティはこの種の問題に非常に役立ちます。助けてうれしい! –