[英]Why does python list slicing allow for referencing entries that aren't there?
考虑以下代码:
>>> arr = np.array(['A', 'B', 'C'])
>>> arr[0:20]
array(['A', 'B', 'C'],
dtype='|S1')
为什么我允许将数组切成3
呢? 我预计这会引发错误,因为没有20个条目可供参考。
这也适用于常规列表切片,字符串切片,元组切片以及大多数可切片对象。 这只是Python约定,允许超出范围的切片并将超出范围的切片端点调整为序列的最近端点。
这取自文档 。
给定一个像s[i:j:k]
这样s[i:j:k]
切片表达式,
将步骤i中从i到j的s切片定义为索引为x = i + n * k的项目序列,使得0 <= n <(ji)/ k。 换句话说,索引为i,i + k,i + 2 * k,i + 3 * k等,当达到j时停止(但不包括j)。 当k为正时,如果i和j较大,则将它们减小为len
numpy数组也是如此。 给定一个切片表达式,例如x[0:20]
,它将被简化为x[0:len(x)]
返回数组中的所有内容。
Python通过返回尽可能多的元素来优雅地处理对元素的无限制访问,而不会引发错误。 这是语言开发人员做出的设计决定。 您可能会或可能不希望出现此错误,因此在切片列表时要格外小心。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.