2015-03-01 4 views
0

Я хочу, чтобы написать программу, которая будет:обновление списка в Python

  1. Возьмите list случайным образом из self.population затем образец три значения из этого списка.
  2. Возьмите еще list из self.population и пробуйте три значения из этого.
  3. Соедините эти два набора из трех.
  4. Удалить все предыдущие значения из моего списка self.population
  5. Добавить мои новые списки, пока у меня не будет 20 списков в списке self.population.

Это то, что я до сих пор:

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

Извините, код не вышел правильно Я буду повторять – brighteyesburning007

+0

Когда вы говорите, что хотите иметь «20 списков в« self.population », что это значит? Вы хотите повторить 'v' 20 раз? – mfitzp

+0

Привет! Я хочу повторить процесс 20 раз, пока у меня не будет 20 новых списков в списке self.population. – brighteyesburning007

ответ

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.

+0

Я только что попробовал это, и то, что я получаю, это всего лишь один длинный список, когда я надеялся, это список из 20 разных списков. – brighteyesburning007

+0

Привет! Да, это работает! Благодаря! – brighteyesburning007

0

Если вы хотите удалить все «лиц» из вашего списка, то почему бы вам не сделать:

self.population = [] 
Смежные вопросы