0

Pythonでトリプルネストリストを作成しようとしています。これは、それぞれが L 語の語彙を持っている N 人の個人のリストであることを意図しており、各単語について語尾 (e) と個人がその単語を最後に使用してからの時間 (t) を保存したいと考えています。私は二重にネストされたリストを作成する方法を知っています。基本的に、1 つの個人に語彙を与えます。

individual_vocab = [[e,t] for L in range(L)]

単語が 5 つあれば、次のようになります。

[[e,t,],[e,t],[e,t],[e,t],[e,t]]

そして、別の単語を変更せずに、ある単語の末尾を変更できました。

今、私はこの語彙でそれぞれの個人の集団を初期化したいと思っています。これが最初に同じであれば問題ありません (実際、望ましい) が、それらは動的でなければなりません。私の最初の本能はこれです:

population =[individual_vocab for N in range(N)]

しかしもちろん、問題はこれが動的ではないことです。この場合、集団内のすべての個人は互いに直接コピーされているため (つまり、individual_vocab を指している)、独立して変更されることはありません。 N が 3 の場合、最初の個人の最初の単語の末尾に新しい値を割り当てようとすると、これが得られます (1 は e、2 は t です)。これにより、最初の単語の末尾が変更されます。すべての個人のための単語:

人口[0][0][0] = "新しい結末"

人口

[[['new ending', 2], [1, 2], [1, 2], [1, 2], [1, 2]], [['new ending', 2], [1, 2], [1, 2], [1, 2], [1, 2]], [['new ending', 2], [1, 2], [1, 2], [1, 2], [1, 2]]]

リストのリストの動的リストを効率的に作成するにはどうすればよいですか?

4

1 に答える 1

1

copyモジュールを使用します。

import copy

individual_vocab = [[e,t] for l in range(L)]

population = [copy.deepcopy(individual_vocab) for n in range(N)]

私の意見を追加すると、このレベルのネストにより、あなたは Python でThree Star C Programmerに相当するに違いないと思います。コードを読みやすくするために、この時点でクラスの作業を開始します。

于 2013-02-13T15:16:27.940 に答える