3

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

我有:

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

当我要求

testroots[[0,0]]

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

Symbol

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

谢谢!

4

2 回答 2

2

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

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

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

左括号前面的部分,在这里List,被称为表达式的头部。并且testroots[[0]]相当于Head[testroots]which 给出List了一个列表。这是有道理的,因为在完整的表达式中,List在元素之前。

但是你的表情testroots[[0,0]]呢?它访问列表头部的头部。您列表的开头是List. 但是头是List什么?毕竟,它没有表格Head[arg1, arg2, ...]

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

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

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

于 2012-10-06T18:46:40.760 回答
2

Mathematica 索引从 1 开始,而不是从零开始。所以 testroots 的 [[0,0]] 条目不存在。您可以使用获取第一个元素

testroots[[1, 1]]
于 2012-10-06T18:28:53.373 回答