1. ホーム
  2. python

[解決済み] Python: n個のリストのリストを作成する最速の方法

2022-12-21 16:40:53

質問

空白のリストを作成するにはどうしたらよいのでしょうか。

[[],[],[]...]

Pythonがメモリ上のリストをどのように扱うかのため、これはうまくいきません。

[[]]*n

これは [[],[],...] を作りますが、各要素は同じリストです。

d = [[]]*n
d[0].append(1)
#[[1],[1],...]

リスト内包のようなものが効く。

d = [[] for x in xrange(0,n)]

しかし、これはループのためにPython VMを使用しています。Cで書かれていることを利用して)暗黙のループを使う方法はないのでしょうか?

d = []
map(lambda n: d.append([]),xrange(0,10))

これは実際に遅いです :(

どのように解決するのですか?

と比べてわずかに速い唯一の方法です。

d = [[] for x in xrange(n)]

from itertools import repeat
d = [[] for i in repeat(None, n)]

を新たに作成する必要はありません。 int オブジェクトを生成する必要がなく、私のマシンでは約15%高速になりました。

編集 : NumPyを使うと、Pythonのループを回避することができます。

d = numpy.empty((n, 0)).tolist()

というように、リスト内包の方が2.5倍ほど遅くなります。