2012-10-05 77 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]]