当我请求嵌套列表的特定元素时,Mathematica给了我一个奇怪的输出。
我有:
testroots = {{0, 0, 0}, {0, 0, 0}}
当我请求
testroots[[0,0]]
我希望得到0,但是Mathematica显示的结果不是。
Symbol
我不明白为什么会这样,或者我做错了什么。
谢谢!
当我请求嵌套列表的特定元素时,Mathematica给了我一个奇怪的输出。
我有:
testroots = {{0, 0, 0}, {0, 0, 0}}
当我请求
testroots[[0,0]]
我希望得到0,但是Mathematica显示的结果不是。
Symbol
Mathematica的索引从1开始,而不是从零开始。因此,testroots的[[0,0]]条目不存在。您可以使用以下方法获取第一个元素:
testroots[[1, 1]]
正如b.gatessucks和bill s所写的那样,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,...]
。Head[1]
是Integer
,Head["Hello"]
是String
,Head[foo]
是Symbol
(假设foo
没有被赋值)。注意,上述形式表达式的头也可以被认为是表达式的类型。列表的类型是List
,a+b
的类型,完整形式为Plus[a,b]
,是Plus
,即一个和。List
是一个符号,因此Head[List]
是Symbol
。因此,对于任何列表,例如你的testroots
,testroots[[0,0]]
将计算为Symbol
。testroots[[1,1]]
。
testroots[[1,1]]
。 - b.gatessucks