Python中的动态三重嵌套列表

时间:2013-02-13 15:07:19

标签: python list dynamic nested

我想在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)]

但当然,问题在于这不是动态的:在这种情况下,群体中的所有个体都是彼此的直接副本(即指向个体_词汇),因此不会独立变化,这样如果我用3的N来做,那么尝试为第一个单词的第一个单词的结尾分配一个新值,我得到这个(其中的是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]]]

如何有效地制作列表清单的动态列表?

1 个答案:

答案 0 :(得分:1)

使用copy模块:

import copy

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

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

添加我的观点 - 我认为这种嵌套级别必须使你成为Three Star C Programmer的Python等价物。我现在开始使用类来保持代码的可读性。