更新python中的列表

时间:2015-03-01 19:35:20

标签: python list

我想编写一个程序:

  1. list随机取一个self.population,然后从此列表中抽取三个值。
  2. list中取另一个self.population并从中抽取三个值。
  3. 连接这两组三个。
  4. 从我的列表self.population
  5. 中删除所有以前的值
  6. 添加我的新列表,直到列表self.population中有20个列表。
  7. 这是我到目前为止所做的:

    def crossover(self):
        for x in range(0,20):
            z=random.choice(self.population)
            y=random.sample(z,3)
            x=random.choice(self.population)
            w=random.sample(x,3)
            v=y+w
            for individual in (self.population):
                self.population.remove(individual)
                #print(self.population)
            self.population.append(v)
            print(self.population)
    

2 个答案:

答案 0 :(得分:0)

如果您想删除所有“'个人'你的清单,那你为什么不这样做:

self.population = []

答案 1 :(得分:0)

你的第一个问题是你在迭代它时改变了一个列表。这是一个很大的禁忌。标准的解决方法是迭代列表的副本,例如

for individual in self.population[:]:
    self.population.remove(individual)

但是,由于您只想清空列表,您可以在一行中执行此操作:

del self.population[:]

注意:您也可以使用self.population = [] ,但这会更改列表对象。

但是,根据您的更新评论,似乎您根本不​​需要删除列表。您正在尝试创建一个新人口,这样我们就可以创建一个list变量来保留它,并让原始人口保持不变,直到我们完成为止。以下代码实现了这一点:

def crossover(self):
    new_population = []

    for x in range(0,20):
        z=random.choice(self.population)
        y=random.sample(z,3)
        x=random.choice(self.population)
        w=random.sample(x,3)
        v=y+w

        new_population.append(v)

    self.population = new_population
    print(self.population)

请注意,新变量new_population用于存储新列表,直到循环完成,然后在原始self.population上分配。