我想将值设置为变量列表,如下所示:
list[[1]] = 2
如果
list[[1]]
是 a
,然后 a
现在将等于 2。我怎样才能做到这一点?
最佳答案
好吧,让我们天真地尝试一下:
做一个列表:
In[1]:= ClearAll[list, a, b, c];
list = {a, b, c};
正如我们所期望的那样:
In[3]:= list
Out[3]= {a, b, c}
将第一个元素设置为 2:
In[4]:= list[[1]] = 2
Out[4]= 2
In[5]:= list
Out[5]= {2, b, c}
这不会影响:
In[6]:= a
Out[6]= a
重新开始:
In[7]:= ClearAll[list, a, b, c];
list = {a, b, c};
In[9]:= list
Out[9]= {a, b, c}
问题是 Set (=) 有
HoldFirst
作为它的一个属性,即,它不评估其左侧的第一个参数,并且赋值是对列表而不是在该位置的变量。但是您可以使用 Evaluate
强制评估:In[10]:= Evaluate[list[[1]]] = 2
Out[10]= 2
现在列表似乎和以前一样:
In[11]:= list
Out[11]= {2, b, c}
但这只是因为 a 仍然存在并且得到了 2 的值(在之前的版本中 a 被 2 替换了):
In[12]:= a
Out[12]= 2
如果您现在将 a 设置为 3,您也会看到更改列表:
In[13]:= a = 3
Out[13]= 3
In[14]:= list
Out[14]= {3, b, c}
编辑
也许更接近您问题的措辞,您可以
Map
Set
在列表中:In[16]:= ClearAll[list, a, b, c];
list = {a, b, c};
In[18]:= Set[#, RandomInteger[10]] & /@ list
Out[18]= {4, 8, 1}
In[19]:= list
Out[19]= {4, 8, 1}
In[21]:= {a, b, c}
Out[21]= {4, 8, 1}
关于wolfram-mathematica - 如何为符号设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5708142/