[心得] 一个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