基本问题,但下面两件事之间的区别是什么:
list[0::,5]
list[0:,5]
另外,哪一个(如果有的话)引用1个元素与多个?
答案 0 :(得分:1)
两个示例都将(slice(0, None, None), 5)
传递给__getitem__
的{{1}}函数(您的变量名为list
)。没有区别。您的问题可以简化为:
list
与a[0::]
相同,答案仍为“是”。
另一方面,a[0:]
与a[:0]
不同,a[::0]
也与a[0:0]
不同。
a[0::0]
现在,使用元组调用的#! /usr/bin/python3
class A:
def __getitem__ (self, item):
print (item)
a = A ()
a [0::,5] #passes a tuple
a [0:,5] #passes a tuple
a [0:] #passes a slice
a [0::]
a [:0]
a [::0]
a [0:0]
a [0::0]
print ('Askewchan\'s conjecture:')
a [:]
a [0:]
的返回值取决于调用它的对象的实现。
答案 1 :(得分:1)
它们是等价的,但我打算将它们称为arr
,因为大概是为了一个numpy数组。
arr[0::,5]
arr[0:,5]
他们也相当于
arr[:, 5]
切片中的:
表示法为
arr[start:end:step]
对于行。在逗号之后,对于列来说它是相同的(对于更多维度,依此类推)。
如果您将说明符留下,则假定它们是:
arr[0:len(arr):1]
所以,如果你把它们全部留空并保留分隔符,你有:
arr[::]
当然,您可以插入任何默认值,它仍然是相同的:
arr[0::]
arr[:len(arr):]
arr[::1]
您只需要使用分隔符来消除歧义。要暗示step
大小,您必须同时拥有两个分隔符:
arr[::1]
但是暗示end
,你只需要一个:
arr[:end]
但是,如果你没有分隔符,那只是获得一个项目,而不是一个切片,所以第一个分隔符是必要的:
arr[0] # only the first item!
arr[0:] # all items