Wolfram mathematica 在Mathematica中保留变量名

Wolfram mathematica 在Mathematica中保留变量名,wolfram-mathematica,Wolfram Mathematica,在Mathematica中,我试图操纵一个列表,这样我可以从以下内容开始: myList = List[{a,b,c,d}]; a=12; b=15; c=7; d=9; 然后我希望能够对列表进行重新排序,输出是变量名而不是数字 正如@george在评论中所说,做你想做的事最简单的方法之一 就是使用转换规则。它们允许用一个值替换 符号,而不为该符号指定值。比如你的情况 (我破坏了订单,因为它与此处无关): 转换规则有两个参数,您可以提取它们。下面是一种从转换规则列表中获取符号列表的方法

在Mathematica中,我试图操纵一个列表,这样我可以从以下内容开始:

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

a=12;

b=15;

c=7;

d=9;

然后我希望能够对列表进行重新排序,输出是变量名而不是数字

正如@george在评论中所说,做你想做的事最简单的方法之一 就是使用转换规则。它们允许用一个值替换 符号,而不为该符号指定值。比如你的情况 (我破坏了订单,因为它与此处无关):

转换规则有两个参数,您可以提取它们。下面是一种从转换规则列表中获取符号列表的方法。
排序
是按字母顺序排列符号的

myList = Sort[Map[First, myValues]]

{a, b, c, d}
要获得值列表,只需将转换规则应用于符号列表 使用
/。
运算符

myList /. myValues 

{12, 15, 7, 9}
现在我们知道怎么做了,我们可以根据数字值对符号进行排序

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

{c, d, a, b}
排序给出元素在列表中的位置(如果已排序)。 这里我们使用数值列表,并将其顺序应用于符号列表

据我所知,Mathematica中没有OrderingBy命令,所以您可以 同样,通过在内部应用给定函数,按以下方式对符号进行排序:

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

{a, c, d, b}
我希望它适合你的申请

在Mathematica中,人们经常做的一件事是以转换规则的形式保持符号和值之间的关联,并对其进行操作

在您的情况下,可以采用以下形式:

SortBy[ myValues, Last]

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

然后你可以选择提取你想要的。这就是图形信息被操纵的方式

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

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

Last /@ Sort[{ReleaseHold[#], #} & /@ Thread[myList]]
{c,d,a,b}


您不应该使用吗?您也可以使用规则
{a->12,b->15}
。(顺便说一句,关联在版本10中是新的)
SortBy[myValues, EulerPhi[Last[#]] &]

{a -> 12, c -> 7, d -> 9, b -> 15}
myList = HoldForm[{a, b, c, d}];

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

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