Lou*_*Lou 5 string variables wolfram-mathematica list
我想知道是否可以使用字符串可变列表的内容来创建新变量。
举个例子:
str={"cow","monkey"}
Run Code Online (Sandbox Code Playgroud)
这些字符串是从文件中提取的。现在,我想将这些字符串当作一个变量来引用。因此可以将变量Cow设置为{4,2,3}
或其他任何设置。当然,任何引用str[[1]]
都会给出字符串“ cow”。
有任何线索还是这是个坏主意?
当然,我可以在列表中添加信息,例如:
str={{"cow",{4,2,3}},{"monkey",{}}
Run Code Online (Sandbox Code Playgroud)
但是我仍然无法直接将Cow作为变量来处理。
最简单的方法是手动使用符号cow
而monkey
不是字符串:
In[309]:=
cow = 1;
monkey = 2;
{cow, monkey}
Out[311]= {1, 2}
Run Code Online (Sandbox Code Playgroud)
但这可能不是你问的。如果您想自动将字符串转换为变量,那么您要做的(如果我正确理解了问题)是首先将字符串转换为符号,因为符号可以被赋值并用作变量:
Remove[cow,monkey];
str = {"cow", "monkey"};
str1 = ToExpression /@ str
{cow, monkey}
Run Code Online (Sandbox Code Playgroud)
(我假设符号cow
和monkey
尚未使用/定义)。之后,您可以使用此问题的答案根据变量在 中的位置分配给变量str1
。然而,这种方法的实用性也值得怀疑。
我认为最有意义的是创建所谓的索引变量,例如
myIndexedVar["cow"] = 1;
myIndexedVar["monkey"] = 2;
Run Code Online (Sandbox Code Playgroud)
其中myIndexedVar
本质上是一个键值对的哈希表,键是您的字符串,值是您想要分配给它们的任何内容。如果需要,该过程可以自动化。
编辑
为了说明对此类变量的分配,这里有一个自动执行此操作的函数:
assignVariables[varNames_List, values_List, hashName_Symbol ] /;
Length[varNames] == Length[values] :=
MapThread[(hashName[#1] = #2) &, {varNames, values}];
Run Code Online (Sandbox Code Playgroud)
以下是如何使用它:
In[316]:= assignVariables[str,{{4,2,3},{}},myIndexedVar]
Out[316]= {{4,2,3},{}}
In[317]:= myIndexedVar["cow"]
Out[317]= {4,2,3}
In[318]:= myIndexedVar["monkey"]
Out[318]= {}
Run Code Online (Sandbox Code Playgroud)
但同样,这确实是一个哈希表,所以当你的问题重新表述为:“我想用字符串键创建一个哈希表。在 Mathematica 中最简单的方法是什么,添加键值配对并访问它们”。答案似乎是 - 索引变量,如上所示。您可能还会发现阅读DownValues很有用,因为它们提供了索引变量的机制。
归档时间: |
|
查看次数: |
2051 次 |
最近记录: |