2011-01-20 2 views
6

nazdrovje (here 참조)가 지적한대로 [email protected]을 사용하여 목록의 각 요소의 순위를 얻을 수 있습니다. 목록에 반복 된 요소가 포함되어있는 경우에도 결과는 n -permutation (반복없이 정수 1 ~ n의 정렬 된 목록으로 사용됨)입니다. 가장 낮은 순위의 요소는 1, 두 번째로 낮은 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 _ 항상 다른 방법이 있습니다. 가끔은 가장 쉬운 방법을 찾을 수 없습니다. 여기에있는 커뮤니티는 이런 종류의 문제에 매우 도움이됩니다. 도와 줘서 기뻐요! –