0

我有一个像这样预初始化的 python 列表: eventarray=[None]*10000

有没有其他方法可以预初始化这个列表,这样 10000 可以是一个变量,可以从内部的不同函数中更改,而不会更改列表中的数据。

注意:预初始化是为了在列表的特定偏移量上插入值。

4

2 回答 2

2

很难确切地说出你在问什么,所以这可能不是你想要的。如果不是,你应该澄清你的问题。

要创建n每个元素为 的元素列表None,您可以执行以下操作:

myList = [None]*n

n必须在范围内才能执行此操作,并且将来的更改n不会影响列表长度。

如果要将值插入列表,并将其余值右移,可以使用list.insert(i,x)

myList = [None]*10000
myList.insert(5,0)

这将0在索引 5 处插入 a,并将剩余的值(索引 5 和更高)移动到右侧。这导致一个列表的长度比插入之前的长度大一。如果您只想在列表中设置一个值:

myList = [None]*10000
myList[5] = 0

这将产生一个包含 10,000 个元素的列表,其中第 6 个元素(索引为 5)为 0。初始列表和最终列表的长度将相同。

于 2012-11-09T15:32:01.183 回答
1

从我可以从您的问题中推断出,您想要创建一个具有全局范围的列表,其长度在运行时确定。

编辑:以下代码现在在每次访问 my_list_creator 时根据需要扩展列表:

foo = []

def my_list_creator(n):
    '''Makes the nth value in a list n. If the list is not
    long enough, it extends it, initialised with None.
    '''
    global foo

    if len(foo) < n:
        foo.extend([None] * (n - len(foo)))

    foo[n-1] = n

def access_a_global():
    print foo

def another_func():
    my_list_creator(10)
    access_a_global()
    my_list_creator(20)        
    access_a_global()

another_func()

foo在范围内是全局的,但根据需要进行初始化。

于 2012-11-09T15:33:40.247 回答