在python裡,想把list顛倒,有個近乎巫術式的寫法
range(10)[::-1] => [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
*Note list[初:終:步長] python語叫做list的slice,上面
是省略掉起點與終點的寫法,於是python自動研判是倒過來取整個序列。
對應到mathematica(MMA)的
Part[list, Span[初,終,步長]] <=> list[[初;;終;;步長]]
- - - - - -
問題是MMA裡這種巫術作用不成 (起碼在我的MMA7還不行)
In[1]: Range[10][[;; ;; -1]]
從錯誤訊息中可以看出端倪:當步長是負的,起點指標應該要比終點大,
無論在python或MMA皆然。
問題是Span前兩個參數,若省略會自動補上 1 跟 All,也就是
Range[10][[;; ;; -1]] -> Range[10][[1;; All;; -1]] 而產生錯誤
python聰明的補上了掉換過,前大後小的指標 <