2011-01-20 36 views
6

Như được chỉ ra bởi nazdrovje (xem here) [email protected] có thể được sử dụng để có được thứ hạng của mỗi phần tử trong một danh sách. Ngay cả khi danh sách chứa các phần tử lặp lại, kết quả là n -permutation (được lấy làm danh sách theo thứ tự các số nguyên từ 1 đến n không lặp lại), trong đó phần tử được xếp hạng thấp nhất được gán 1, số thấp thứ hai 2, v.v. bởi Andrzej Kozlowski, sau đây giữ (xem thêm here):Đặt hàng @ Đặt hàng và xếp hạng các hiệu ứng

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

tôi muốn tạo hoán vị thứ hạng cao nhất mà yếu tố xếp hạng được gán 1, thứ hai cao nhất 2, vv như vậy những điều sau đây giữ:

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

Điều này có vẻ đơn giản, nhưng tôi chỉ có thể đưa ra một giải pháp khá khó xử. Tại thời điểm này, tôi làm như sau:

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

Có cách nào thanh lịch hơn hoặc trực quan hơn không? Chắc chắn phải có?

Một ví dụ:

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

[email protected]@mylist 

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

Output (chú ý mối quan hệ tương hỗ giữa các hoán vị)

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

(Cả hai sau đây đánh giá là True)

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

Trả lời

4

Nếu bạn đặt

oldPerm = [email protected]@mylist 

sau đó

newPerm = - oldPerm + [email protected] + 1 

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

True


Vì vậy, bạn có thể xác định

newPerm[x_] := 1 + [email protected] - [email protected]@x 

Chẳng hạn như

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

True

+0

Đó là rất tốt đẹp! Cảm ơn bạn. Tôi đang tranh luận liệu có nên đăng câu hỏi như tôi đã có một giải pháp của các loại. Tôi rất vui vì tôi đã làm. – tomd

+0

@TomD Trong Mma _there luôn luôn là một cách khác, và đôi khi người ta không thể tìm thấy dễ nhất. Cộng đồng ở đây rất hữu ích với loại vấn đề này. Vui mừng được giúp đỡ! –

Các vấn đề liên quan