0

我正在寻找在 Python 中创建一个三重嵌套列表。这意味着是 N 个个人的列表,每个人都有 L 个单词的词汇表,对于每个单词,我想存储一个结尾 (e) 和该个人最后一次使用单词 (t) 以来的时间。我知道如何做一个双重嵌套列表,本质上是给一个人一个词汇表:

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

如果我有五个词,这会给我这样的东西:

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

我可以改变一个词的结尾而不改变另一个词。

现在,我想用这个词汇表初始化一个个体群体,如果一开始就相同,那很好(事实上,更可取),但它们必须是动态的。我的第一直觉是这样的:

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

但当然,问题在于这不是动态的:在这种情况下,人口中的所有个体都是彼此的直接副本(即指向个人词汇),因此不会独立改变,如果我这样做这个 N 为 3,然后尝试为第一个个体的第一个单词的单词结尾分配一个新值,我得到这个(其中一个是 e,2s 是 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 中的三星级 C 程序员。此时我将开始使用类以保持您的代码可读性。

于 2013-02-13T15:16:27.940 回答