你能改变python中的索引吗?

时间:2014-09-25 03:28:59

标签: python arrays indexing

我的意思是,我可以更改数组的调用索引。例如,如果我有数组a = [1,2,3]我可以这样做[1] = 1?我知道这是FORTRAN中的一个选项,它确保事情有条不紊。感谢

4 个答案:

答案 0 :(得分:5)

在Python中更改列表的索引几乎绝对不是您想要做的,因为它会中断len(some_list),导致有效输入和迭代的逐个错误。从索引[1]开始,与大多数语言的设计背道而驰。

Python的列表是在C数组之上实现的(参见listobject.c in the Python source),它们从0开始编制索引。

如果您肯定需要从一开始计算,请考虑通过将a[0]设置为None来初始化您的列表,这样您就可以清楚地知道您正在插入虚拟值。

答案 1 :(得分:4)

虽然一般情况下它是不可取的,但您可以自由扩展内置类型,例如:

# Python 3 syntax
class FiveList(list):
    def __getitem__(self, idx):
        return super().__getitem__(idx - 5)

>>> FiveList(range(100))[10]
5

你必须实现大量的魔术方法(下面),并检查参数是否类似于int(索引)或切片。

__getitem__
__setitem__
__delitem__

另外,请注意负面指数,因为它们在Python中很特别。

答案 2 :(得分:1)

在不了解您的应用程序的情况下很难提供帮助,但阅读Emulating Container Types可能对您有用。

我建议如果你要写一个类,比如BasedArray,它有一个整数base属性,用于指定第一个元素的索引,以及一个正常的从零开始的{{1}持有数据。然后你就可以开始只使用list__len____get item__方法,这些方法很简单,而__setitem__可能不那么简单。您需要的确切方法集取决于您拥有这些基于数组的的内容。

答案 3 :(得分:0)

我假设你的意思是将索引设为1,而不是0?

为什么不在开始时加0? E.g。

 [0,1,2,3]