当我要求嵌套列表的特定元素时,Mathematica给了我一个奇怪的输出。
我有:
testroots = {{0, 0, 0}, {0, 0, 0}}
当我要求
时testroots[[0,0]]
应该给我一个0,而不是 Mathematica 说
Symbol
我不明白为什么会这样或我做错了什么。
谢谢!
答案 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]
为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]]
。