我想编写一个程序:
list
随机取一个self.population
,然后从此列表中抽取三个值。list
中取另一个self.population
并从中抽取三个值。 self.population
self.population
中有20个列表。这是我到目前为止所做的:
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)
答案 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
上分配。