当我要求嵌套列表的特定元素时,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
我不明白为什么会这样或者我做错了什么。
谢谢!
正如 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"]
isString
和Head[foo]
is Symbol
(假设foo
尚未分配给)。请注意,上述形式的表达式的头部也可以被认为是表达式的类型。列表List
的类型是a+b
,完整形式的类型Plus[a, b]
是Plus
,即总和。
现在List
是一个符号,因此Head[List]
是Symbol
。因此,对于任何列表,例如您的testroots
,testroots[[0,0]]
都将评估为Symbol
。
要获取列表第一个元素的第一个元素,请使用testroots[[1,1]]
.
Mathematica 索引从 1 开始,而不是从零开始。所以 testroots 的 [[0,0]] 条目不存在。您可以使用获取第一个元素
testroots[[1, 1]]