关于多维切片

关于多维切片

Python还支持扩展切片操作,这对于操作多维数据结构(如矩阵和数组)会很方便。你可以这样使用扩展切片:

[Copy to clipboard] [ - ]
CODE:
   1 a = m[0:100:10]          # 步进切片 (stride=10)
   2 b = m[1:10, 3:20]        # 多维切片
   3 c = m[0:100:10, 50:75:5] # 多维步进切片
   4 m[0:5, 5:10] = n         # 扩展切片分配
   5 del m[:10, 15:]          # 扩展切片删除

扩展切片的一般格式是i:j stride, srtide是可选的。和普通切片一样,你可以省略每个切片的开始或者结束的值。另外还有一个特殊的对象--省略对象。写做 (...),用于扩展切片中表示任何数字:

[Copy to clipboard] [ - ]
CODE:
   1 a = m[..., 10:20]        # 利用省略进行的扩展切片操作
   2 m[10:20, ...] = n

当进行扩展切片操作时,__getitem__(), __setitem__(), 和 __delitem__()方法分别用于实现访问、修改、删除操作。然而在扩展切片操作中,传递给这些方法的参数不是一个整数,而是一个包含切片对象的元组(有时还会包括一个省略对象)。例如:

a = m[0:10, 0:100:5, ...]

上面的语句会以下面形式调用__getitem__():

a = __getitem__(m, (slice(0,10,None), slice(0,100,5), Ellipsis))

        注意:在Python1.4版开始,就一直有扩展切片的语法,却没有任何一个内建类型支持扩展切片操作。
              Python 2.3改变了这个现状。从Python 2.3开始,内建类型终于支持扩展切片操作了,这要感谢 Michael Hudson。


这个是怎么用的?有点疑惑
不要试图使用语言的一些与其他语言风格大相径庭的特性。 如果这样,会给后来的阅读和修改者造成不必要的麻烦。对于移植也会带来麻烦。
我只是想知道,我觉得楼上说的不是理由,语言提供了这个特性,所以解决一些问题的时候使用这个语言比其他的语言更好,使用一种语言就是要把这种东西发挥出来。
python移植不会是问题吧?如果真的想把它改成c++,那么想改的人也必须具备这个能力。
其实我开始使用c++的方式来写python,这也是我一直努力改进的。
不知道楼上有没有看过说是用c++写的程序,除了用cin cout,其他的就是c,我看了十分不爽,这个是我看过的一个项目代码。
我用c++,cin cout都不用,只用printf


QUOTE:
原帖由 ttvast 于 2007-9-7 13:30 发表
我用c++,cin cout都不用,只用printf

  不至于吧。 所有的都按一种方式写还要这么多语言干什么。  语言是思想的外壳, 对于编程语言也是这样。  每种语言都有他的特点这也是他存在的意义。  当然如果是多人合作的大项目也要注意不要用太生僻的东西, 不过这个还好吧。
跑题了。。。
大家请切回正题,等我有时间了也查一下,cookbook上可能回有的吧
在python2.5下
我用多维切片,怎么提示:
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    a[1:10,80:90]
TypeError: list indices must be integers

是那里错了呢?
最常见的记住
[::-1] 的 reverse 功能就行了
我觉得写[x] 这样的代码很有可能自己都看不懂.
只要能运行就用啊 不用就浪费了