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)

これにより、インデックス 5 に a が挿入0され、残りの値 (インデックス 5 以上) が正しい値にシフトされます。これにより、挿入前よりも長さが 1 つ長いリストが作成されます。リストに値を設定するだけの場合:

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

これにより、6 番目の要素 (インデックス 5) が 0 の 10,000 要素のリストが生成されます。最初と最後のリストの長さは同じになります。

于 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 に答える