0

作为一个附带项目和 C++11 实践,我正在开发一个类似于 Numpy 的小型 n 维数组库。我打算主要遵循 Numpy 约定,但在切片的情况下,我正在考虑选择不同的东西。

问题是,当使用负变量进行索引时,以及向后迭代时,范围的最后一个元素总是不可访问的。例如,array[x:y]不能包含带有负数的最后一个元素y。编辑:我不知道通过None在 Python 中正好解决了这个问题。这个问题仍然存在,因为它似乎是我想避免的那种临时解决方案,而它在 C++ 中的对应物会很麻烦。

我考虑了三个主要选项:

  1. 使用包含范围,例如在 Haskell 中。毕竟,Haskellers 并没有为此特别烦恼。尽管这与 Python 经验有很大的不同。

  2. 不允许负索引。在可用性方面并没有太大的改进,当绝对需要从末尾计算索引时,从大小中简单地减去就足够了。

  3. 切片方式与 Python 相同。所提到的问题在实际代码中很少出现,当它出现时,人们可以轻松识别和规避它。

我目前倾向于选项一。对此事有何看法?

4

1 回答 1

2

您说“使用变量进行索引时始终无法访问范围的最后一个元素”是错误的。

>>> x = 5
>>> y = 100
>>> r = list(range(10))
>>> r[x:y]      # much larger number than last index
[5, 6, 7, 8, 9]
>>> r[x:len(r)] # length of the list
[5, 6, 7, 8, 9]
>>> y = None
>>> r[x:y]      # variable set to None
[5, 6, 7, 8, 9]

None在向后阅读列表时也适用。

于 2013-07-05T21:45:49.850 回答