Mathematica 列表输出

3

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

我有:

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

当我请求

testroots[[0,0]]

我希望得到0,但是Mathematica显示的结果不是。

Symbol

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

6
列表元素从1开始计数,而不是从零开始。请尝试使用 testroots[[1,1]] - b.gatessucks
2个回答

2

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

testroots[[1, 1]]

2

正如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,...]
对于原子表达式,Mathematica会给出描述原子类型的符号。例如,Head[1]IntegerHead["Hello"]StringHead[foo]Symbol(假设foo没有被赋值)。注意,上述形式表达式的头也可以被认为是表达式的类型。列表的类型是Lista+b的类型,完整形式为Plus[a,b],是Plus,即一个和。
现在List是一个符号,因此Head[List]Symbol。因此,对于任何列表,例如你的testrootstestroots[[0,0]]将计算为Symbol
要获取列表的第一个元素的第一个元素,请使用testroots[[1,1]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接