3

私はPythonの初心者です。リストの特定のインデックスに挿入する必要のある一連のオブジェクトがありますが、それらは順序が狂っているので、単に追加することはできません。IndexErrorsを回避するために、必要に応じてリストを増やすにはどうすればよいですか?

def set(index, item):
    if len(nodes) <= index:
        # Grow list to index+1
    nodes[index] = item

を介して初期容量のリストを作成できることは知っていますが、リストを適切nodes = (index+1) * [None]に拡張するための通常の方法は何ですか?以下は効率的ではないようです。

for _ in xrange(len(nodes), index+1):
    nodes.append(None)

さらに、組み込みリストの代わりに使用する必要があるクラスが標準ライブラリにあると思いますか?

4

3 に答える 3

7

これはそれを行うための最良の方法です。

>>> lst.extend([None]*additional_size)
于 2012-04-14T17:06:52.210 に答える
2

おっと、最初はあなたの質問を誤解していたようです。リストの長さを拡張して、リストの現在の長さよりも大きなインデックスに何かを挿入できるようにする方法を尋ねている場合は、lst.extend([None]*(new_size - len(lst))他の人が示唆しているように、おそらく行く方法です。もちろん、必要な最大インデックスが事前にわかっている場合は、事前にリストを作成してNones で埋めることは理にかなっています。


参考までに、元のテキストを残しておきます。既存のリストの途中に何かを挿入するには、通常、自分でリストを大きくすることを心配する必要はありません。リスト オブジェクトには、リスト内の任意の場所にオブジェクトを挿入できるinsertメソッドが付属しています。したがって、set関数の代わりに、使用するだけです

lst.insert(item, index)

またはあなたができる

lst[index:index] = item

これは同じことをします。リストのサイズ変更は Python が行います。

list特にこの種のランダムアクセス挿入が必要な場合は、の代わりに使用する必要があるクラスが標準ライブラリにあるとは限りません。ただし、collectionsモジュールには知っておくべきクラスがいくつかあります。それらは他の状況で役立つ可能性があるためです (たとえば、リストの一方の端に常に追加していて、項目の数が事前にわからない場合など)。あなたが必要とする、deque適切でしょう)。

于 2012-04-14T17:15:20.033 に答える
1

おそらく次のようなものです:

lst += [None] * additional_size

(リスト変数リストはリストコンストラクターの名前でもあるため、呼び出さないでください)。

于 2012-04-14T17:03:45.177 に答える