Python中的`a[start:stop, i]`是什么意思?

3

Python官方文档中slice函数的介绍如下(强调为译者加):

class slice(stop)
class slice(start, stop[, step])

返回一个表示由range(start, stop, step)指定的索引集合的切片对象。如果没有传入startstep参数,则它们默认为None。切片对象具有只读数据属性startstopstep,它们仅返回参数值(或其默认值)。它们没有其他显式功能;但是,NumPy和其他第三方软件包使用它们。当使用扩展索引语法时,也会生成切片对象。例如: a[start:stop:step]a[start:stop,i]。请参阅itertools.islice()以获取返回迭代器的替代版本。

那么a[start:stop,i]是什么意思呢?

我在Python 3.6中进行了尝试:

a = [1, 2, 3, 4, 5, 6]
a[1:3,1]

但是却收到了:

TypeError: list indices must be integers or slices, not tuple

1
根据 a 的不同含义也不同。如果 a 是一个列表,那么它是无效的,正如你所看到的。 - mkrieger1
1
文档不太清楚,但你可以在numpy中完成它,大致意思是选择第1列的1到3行。 - diggusbickus
也许文档中只是一个打字错误? - jochen
1个回答

2
您不能将:,与列表结合使用。 :用于直接切片:
a[1:3:1]

, 用于 slice

a[slice(1,3,1)]

然而,对于支持此操作的对象(例如numpy数组),您可以在多个维度上进行切片:

import numpy as np
a = np.array([[0,1,3],[3,4,5]])
a[0:1,2]

输出:数组([3])


5
你可以这样理解,a[1:2, 3] 等价于 a.__getitem__((slice(1, 2, None), 3)),其他类也可能支持类似的操作(例如查看 numpy 的许多示例)。但是 list 不支持该操作。 - mata
1
@mata 我以为这个问题是关于列表的,我会更新。 - mozway
1
你看到了吗,a[start:stop,i]正是由OP引用Python文档中的内容? - jochen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接