私はこのように事前に初期化された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)
これにより、インデックス 5 に a が挿入0
され、残りの値 (インデックス 5 以上) が正しい値にシフトされます。これにより、挿入前よりも長さが 1 つ長いリストが作成されます。リストに値を設定するだけの場合:
myList = [None]*10000
myList[5] = 0
これにより、6 番目の要素 (インデックス 5) が 0 の 10,000 要素のリストが生成されます。最初と最後のリストの長さは同じになります。
あなたの質問から推測できることから、実行時に長さが決定されるグローバルスコープのリストを作成したいと考えています。
編集: 次のコードは、 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
スコープはグローバルですが、必要に応じて初期化されます。