String 如何在Mathematica 8中将字符串列表用作变量?

String 如何在Mathematica 8中将字符串列表用作变量?,string,list,wolfram-mathematica,String,List,Wolfram Mathematica,我相信我的问题很简单,我就是找不到解决办法,我已经用尽了帮助文档来寻找类似的情况 我有一个城市名称的字符串列表,我想设置一个函数/表达式,使用函数列表中的每个名称,然后将结果输出到表中。说到用Mathematica语言写作,或者任何语言写作,我都是一个完全的新手。所以,如果我使用了错误的术语,请容忍我。这是我到目前为止所写内容的一个示例 Module[ {dateRange, mean, cdd, hdd, station, country, location, population,

我相信我的问题很简单,我就是找不到解决办法,我已经用尽了帮助文档来寻找类似的情况

我有一个城市名称的字符串列表,我想设置一个函数/表达式,使用函数列表中的每个名称,然后将结果输出到表中。说到用Mathematica语言写作,或者任何语言写作,我都是一个完全的新手。所以,如果我使用了错误的术语,请容忍我。这是我到目前为止所写内容的一个示例

Module[
 {dateRange, mean, cdd, hdd, station, country, location, population, 
  GDPPerCapita,
  reference = (65 - 32)/1.8, cumList},


 cityLIST = CityData[#, "Name"] & /@ CityData[];


 station =;
 country = CityData[station, "Country"];
 population = CityData[station, "Population"];
 location = CityData[station, "Coordinates"];
 GDPPerCapita = CountryData[country, "GDPPerCapita"];
 dateRange = {{2011, 1, 1}, {2011, 12, 31}, "Day"};
 mean = WeatherData[station, "MeanTemperature", dateRange];
 cdd = Join[Transpose[{mean[[All, 1]]}], 
   Transpose[{Max[# - reference, 0] & /@ mean[[All, 2]]}], 2];
 hdd = Join[Transpose[{mean[[All, 1]]}], 
   Transpose[{Min[# - reference, 0] & /@ mean[[All, 2]]}], 2];
 cumList = Transpose[{Join[
     Transpose[{cdd[[All, 1]]}],
     Transpose[{Drop[FoldList[Plus, 0, cdd[[All, 2]] + hdd[[All, 2]]],
         1]}],
     2]}];


 Grid[station, country, location, population, GDPPerCapita, 
  Last[cumList]]]
cityList是我想要使用的输入列表。我希望cityList中的项目成为station的变量。然后我希望所有这些都输出到一个表中(上面列出的网格只是一个占位符)。我提前道歉,因为这是一些非常基本的东西,我只是没能找到一种方法让它工作。请注意,我使用的数据来自Mathematica的精选数据集。。。cityData、countryData和WeatherData


如果这里有人能给我一些有用的诀窍,我将不胜感激

我没有在这台机器上安装Mathematica,所以这可能是一个语法上不正确的答案

Mathematica和列表操作的一个有用技巧是首先定义一个函数,该函数对列表中的元素类型进行操作。在您的情况下,您需要一个函数,例如:

writeARowOfMyTable[city_String]:=...
一旦你有了这个功能,你就可以通过各种方式将它应用到城市名称列表中。一种方法是给函数赋予属性
Listable
(检查文档),这意味着

writeARowOfMyTable[listOfCityNames_List]
将返回列表中每个城市的行。另一种方法是使用
Map
Apply
,再次检查文档

这只剩下编写函数
writeARowOfMyTable[]
。我从你的一个评论中看到你已经这样做了。因此,我建议您将代码包装到一个模块中,如下所示:

writeARowOfMyTable[city_String] := Module[{localVariablesGoHere},codeGoesHere]

这是解决方案的概要:

用于收集所需每个城市的数据的函数:

GetData[city_List] := {city, 
  CityData[city // First, "Population"], 
  CountryData[city // Last, "GDPPerCapita"], 
  CityData[city, "Coordinates"], 
  WeatherData[First@city, 
     "MeanTemperature", {{2011, 1, 1}, {2011, 12, 31}, "Day"}][[All, 2]] // Mean}
将功能映射到您想要的城市,在本例中,所有可用的城市:

res=GetData/@CityData[];
以下是前10个城市的产出:

GetData /@ (CityData[][[1 ;; 10]]) // TableForm
不过,请注意,您可能需要处理一些丢失的数据


您好,您能给我一个您想要的输出的描述和示例吗。快速观察
cumList
,因为它是
参考的一部分
似乎是在分配任何值之前使用的<代码>站=不是有效语句,因此在使用station之前不会向其提供任何值。在编程中有用的一个技巧。就是从你想做的最简单的部分开始,也许只是一句话,让它发挥作用,然后再添加一些功能,配合它的工作等等,直到你达到你想要的程度。通过这种方式,您可以合理地确定每个子部分都能正常工作。@image\u医生,我希望输出是城市、国家、人口、人均GDP、cdd、hdd和累计值的列,并且这些行具有citylist中每个城市的记录。很抱歉,我应该指出,例如在车站后面使用“纽约”这样的城市名称会产生这样的结果:网格[“芝加哥”,“美国],{41.8375511
,-87.6818441
,-2695598、-45230.20468787806
,{{{2011,12,31},-2842.4066666666666666736
}]这些是我想要的结果,我只是不知道怎么做“循环”所有城市并输出表格。感谢您的回复!@image\u doctor这些语句适用于设置为“Station”的一个城市,但不适用于我要用于Station的列表:cityLIST=CityData[#,“Name”]&/@CityData[];我在上一个问题中输入的代码恰好是我当时正在使用的代码,很抱歉造成混淆。Mathematica中构建功能的一种常见方法是将函数映射到列表上。因此,您可以编写一个函数,返回所需的数据,然后执行myFunc/@{CityName,CityName,…,CityName}。其中,
/@
地图
功能的简写。在您的案例中,城市名称位于
城市列表
中。
站点
是作为气象站还是城市名称?