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