保留Mathematica中的变量名称

时间:2014-09-29 18:38:02

标签: wolfram-mathematica

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

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

a=12;

b=15;

c=7;

d=9;

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

2 个答案:

答案 0 :(得分: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}

如果对元素进行排序,则排序会给出列表中元素的位置。 这里我们使用数值列表并将其顺序应用于符号列表。

据我所知,Mathematica中没有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 :(得分:1)

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

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

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

{c,d,a,b}