您好,在python中为列表中的任何索引设置值的更具python风格的方法是什么?

您好,在python中为列表中的任何索引设置值的更具python风格的方法是什么?,python,python-3.x,data-structures,Python,Python 3.x,Data Structures,我正在用python创建自己的数据结构,我称之为数组。我希望它具有的一个属性是,例如,如果array=[1,2],可以编写array[5]=6,然后array=[1,2,None,None,None,6]。我已经完成了这项工作,但我的代码似乎非常笨拙 def __setitem__(self,index,value): try: self.array[index] = value except IndexError: if index+1 >

我正在用python创建自己的数据结构,我称之为数组。我希望它具有的一个属性是,例如,如果
array=[1,2]
,可以编写
array[5]=6
,然后
array=[1,2,None,None,None,6]
。我已经完成了这项工作,但我的代码似乎非常笨拙

def __setitem__(self,index,value):
    try:
        self.array[index] = value
    except IndexError:
        if index+1 > len(self):
            add = index + 1 - len(self)
            self.array += [None] * add
            self.array[i] = value

我觉得这很好。如果将元素设置在现有范围之外是一个例外,那么使用try except here是正确的方法。你也应该考虑这个情况,<代码>索引>代码>不大于列表的长度。

from itertools import repeat

def __setitem__(self,index,value):
    try:
        self.array[index] = value
    except IndexError:
        if index < 0:
            raise
        self.array.extend(repeat(None, index-len(self)))
        self.array.append(value)
从itertools导入重复
定义设置项(自身、索引、值):
尝试:
self.array[索引]=值
除索引器外:
如果指数<0:
提升
self.array.extend(重复(无,索引len(self)))
self.array.append(值)

您不需要
试试。。。除了
。。。一个简单的
if
就可以了。列表理解不应该因为它的副作用而实现,但也可以有相同的结果:
[arr.append(None)for i in range(index len(arr))]
然后
arr.append(value)
。仅供参考,python有一个数组数据类型:@Alexander,但这与此有什么关系?
from itertools import repeat

def __setitem__(self,index,value):
    try:
        self.array[index] = value
    except IndexError:
        if index < 0:
            raise
        self.array.extend(repeat(None, index-len(self)))
        self.array.append(value)