【发布时间】:2022-01-24 20:12:55
【问题描述】:
在 Python 3.9 中,不能使用范围对象来索引列表。 确实运行以下代码,第二次打印将返回错误说明“TypeError:列表索引必须是整数或切片,而不是范围”。
x = [1, 2, 3]
s = slice(3)
r = range(3)
print(x[s]) # ok
print(x[r]) # error
这是为什么? Python 解释器不能将范围转换为底层的切片,并将其用于索引吗? 这是因为一些根本原因,还是只是开发人员没有实现(还没有实现?)?
有趣的是,确实可以使用范围索引 numpy 数组!
【问题讨论】:
-
请注意,
numpy确实不将ranges 用作slices。比较np.array([1, 2, 3])[range(0, -2)]和np.array([1, 2, 3])[slice(0, -2)]。 Numpy 使用range来表示它的本质——一个序列。 -
转换确实是微不足道的(
slice(r.start, r.stop, r.step)),但我想不出一个实际情况,你有一个但想要另一个。 -
@MisterMiyagi,谢谢,非常有趣的例子:切片中负数的含义帮助我理解了为什么范围不能提供与切片相同的功能(即索引列表)。如果您想让您的评论成为答案,我很乐意接受。 chepner,谢谢,我知道。 :)
标签: python list indexing range slice