我有一个像这样预初始化的 python 列表: eventarray=[None]*10000
有没有其他方法可以预初始化这个列表,这样 10000 可以是一个变量,可以从内部的不同函数中更改,而不会更改列表中的数据。
注意:预初始化是为了在列表的特定偏移量上插入值。
我有一个像这样预初始化的 python 列表: eventarray=[None]*10000
有没有其他方法可以预初始化这个列表,这样 10000 可以是一个变量,可以从内部的不同函数中更改,而不会更改列表中的数据。
注意:预初始化是为了在列表的特定偏移量上插入值。
很难确切地说出你在问什么,所以这可能不是你想要的。如果不是,你应该澄清你的问题。
要创建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。初始列表和最终列表的长度将相同。
从我可以从您的问题中推断出,您想要创建一个具有全局范围的列表,其长度在运行时确定。
编辑:以下代码现在在每次访问 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
在范围内是全局的,但根据需要进行初始化。