2012-10-05 81 views
2

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

我:

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

当我问

testroots[[0,0]] 

应该给我一个0,而不是数学

Symbol 

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

谢谢!

+5

列表元素从1开始计数,而不是零。试试'testroots [[1,1]]'。 –

回答

2

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

testroots[[1, 1]] 
2

由于b.gatessucks和纸币S已经写,数学列表索引1.然而指数0也是允许开始获得的第一个元素,并给出了表达的Head。这是什么意思?

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

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

在左括号前面Thhe一部分,这里List,被称为表达式的头部。 testroots[[0]]相当于Head[testroots],它给出List的列表。这是合理的,因为在完整表达式中,List位于元素之前。

但是,您的表情testroots[[0,0]]?它访问您的列表头的头。您的名单的头是List。但List的负责人是什么?毕竟,它没有形式Head[arg1, arg2, ...]

对于原子表达式,Mathematica给出了一个描述原子的类型的符号。例如,Head[1]Integer,Head["Hello"]StringHead[foo]Symbol(假设foo还没有被分配给)。请注意,上述表单的表达式的头部也可以被视为表达式的类型。列表的类型是List,并且a+b的类型,完整形式Plus[a, b]Plus,也就是一个和。

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

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