2014-09-29 30 views
2

在數學變量名,我試圖操縱名單,這樣我可以有像開始:保留在數學

myList = List[{a,b,c,d}]; 

a=12; 

b=15; 

c=7; 

d=9; 

然後我想能夠重新排序與輸出作爲名單變量名稱而不是數字。

+0

不應該使用一個[協會](http://reference.wolfram.com/language/ref/Association.html )? – APerson 2014-09-29 18:43:58

+0

您也可以使用規則「{a-> 12,b-> 15}」。 (關聯在版本10中是新的方式) – agentp 2014-09-29 20:03:51

回答

1

正如@george在評論中所說的,最簡單的方法之一就是使用轉換規則來做你想要的 。它們允許用一個符號的值代替 符號,而不爲該符號分配值。例如,在你的情況 (我已經錯位的順序,因爲它是不是與此有關):

myValues = {d->9, a->12, b->15, c->7} 

轉換規則有兩個參數,你可以提取它們。因此,這是一種從轉換規則列表中獲取符號列表的方法。 Sort這裏是按照字母順序排列的符號。

myList = Sort[Map[First, myValues]] 

{a, b, c, d} 

爲了得到值的列表,只需應用變換規則的符號 列表與/.操作

myList /. myValues 

{12, 15, 7, 9} 

現在我們知道該怎麼做,我們就可以進行排序,根據符號到他們的數值

mySortedList = myList[[Ordering[ myList /. myValues]]] 

{c, d, a, b} 

排序給出了元素在列表中的位置,如果他們被排序。 這裏我們使用數值列表並將其順序應用到符號列表中。

,因爲在數學沒有OrderingBy命令,據我所知,您可以 也通過應用其內部訂購這樣爲了通過給定函數的符號:

myList[[Ordering[Map[EulerPhi, myList /. myValues]]]] 

{a, c, d, b} 

我希望它適合你的應用程序。

Mathematica中經常會遇到的一件事是以變換規則的形式保存符號和值之間的關聯並對其進行處理。

在你的情況下,可以採取以下形式:

SortBy[ myValues, Last] 

{c -> 7, d -> 9, a -> 12, b -> 15} 

SortBy[myValues, EulerPhi[Last[#]] &] 

{a -> 12, c -> 7, d -> 9, b -> 15} 

然後你可以選擇提取你想要的。這就是圖表信息被操縱的方式。

1
myList = HoldForm[{a, b, c, d}]; 

a = 12; 
b = 15; 
c = 7; 
d = 9; 

Last /@ Sort[{ReleaseHold[#], #} & /@ Thread[myList]] 

{C,d,A,B}