長さnのリストのリストを初期化するつもりです。
x = [[]] * n
ただし、これは何らかの形でリストをリンクします。
>>> x = [[]] * 3
>>> x[1].append(0)
>>> x
[[0], [0], [0]]
私は次のようなものを期待しています:
[[], [0], []]
何か案は?
問題は、それらがすべてメモリ内のまったく同じリストであることです。[x]*n
この構文を使用すると、n
多くのx
オブジェクトのリストが得られますが、それらはすべて同じオブジェクトへの参照です。それらは別個のインスタンスではなく、n
同じインスタンスへの参照にすぎません。
3 つの異なるリストのリストを作成するには、次のようにします。
x = [[] for i in range(3)]
これにより、 の 3 つの個別のインスタンスが得られます。これ[]
が必要です。
[[]]*n
と類似しています
l = []
x = []
for i in range(n):
x.append(l)
while[[] for i in range(3)]
は次のようになります。
x = []
for i in range(n):
x.append([]) # appending a new list!
In [20]: x = [[]] * 4
In [21]: [id(i) for i in x]
Out[21]: [164363948, 164363948, 164363948, 164363948] # same id()'s for each list,i.e same object
In [22]: x=[[] for i in range(4)]
In [23]: [id(i) for i in x]
Out[23]: [164382060, 164364140, 164363628, 164381292] #different id(), i.e unique objects this time