[心得] 一個python來的巫術

作者: jurian0101 (Hysterisis)   2013-03-29 21:00:36
在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聰明的補上了掉換過,前大後小的指標 <
作者: akrsw (quo vadis?)   2013-03-30 10:28:00
如果你只是想顛倒,可用Reverse。但我猜你應該是想玩 想練功
作者: jurian0101 (Hysterisis)   2013-03-30 23:06:00
Y,但事實上[[;;;;-1]]還比Reverse@長兩個字XD
作者: sunev (Veritas)   2013-04-01 18:14:00
效率呢?我猜Reverse比較快,更何況修改內建函數很危險。

Links booklink

Contact Us: admin [ a t ] ucptt.com