Mathematica列表输出

时间:2012-10-05 19:28:18

标签: wolfram-mathematica

当我要求嵌套列表的特定元素时,Mathematica给了我一个奇怪的输出。

我有:

testroots = {{0, 0, 0}, {0, 0, 0}}

当我要求

testroots[[0,0]]

应该给我一个0,而不是 Mathematica

Symbol

我不明白为什么会这样或我做错了什么。

谢谢!

2 个答案:

答案 0 :(得分:2)

Mathematica指数从1开始,而不是零。因此,testroots的[[0,0]]条目不存在。您可以使用

获取第一个元素
testroots[[1, 1]]

答案 1 :(得分:2)

正如b.gatessucks和bill已经写过的那样,Mathematica列表从索引1开始。但是索引0也是允许的,并给出表达式的Head。那是什么意思?

好吧,Mathematica中的列表{a,b,c}在内部是表单List[a, b, c]的表达式。你可以通过FullForm应用它来看到它:

FullForm[{a, b, c}]
(*
==> List[a, b, c]
*)

开头括号前面的部分,List,被称为表达式的头部。 testroots[[0]]相当于Head[testroots],它为列表提供List。这是有道理的,因为在完整的表达式中,List位于元素之前。

然而你的表达式testroots[[0,0]]怎么样?它访问列表头部的头部。列表的头部是List。但是List的头脑是什么?毕竟,它没有Head[arg1, arg2, ...]形式。

对于原子表达式,Mathematica给出了一个描述原子 type 的符号。例如,Head[1]IntegerHead["Hello"]StringHead[foo]Symbol(假设尚未分配foo) 。注意,上述形式的表达式的头部也可以被认为是表达式的类型。列表类型为Lista+b,完整格式Plus[a, b]的类型为Plus,即总和。

现在List是一个符号,因此Head[List]Symbol。因此,对于任何列表,例如testrootstestroots[[0,0]]将评估为Symbol

要获取列表第一个元素的第一个元素,请使用testroots[[1,1]]