Для цикла для итерации атрибута списка классов - PullRequest
0 голосов
/ 26 апреля 2019

Я новичок в объектно-ориентированном программировании на Python и столкнулся с проблемой. Я пытаюсь перебрать атрибут списка класса, однако мой цикл печатает весь список, а не каждый элемент.

Класс:

class Population:
    def __init__(self, population):
        self.population = population
        self.popList = []
        pool = ThreadPool(mp.cpu_count()-1)
        self.popList.append([pool.apply(Creature.P, args=(
            self, 0, random.randint(1, 2))) for creature in range(population)])
        pool.close()
        pool.join()

    if __name__ == "__main__":
        import doctest
        doctest.testmod()

Первый вызов (который точно создает население и popList):

 # RANDOM FIRST GENERATION INITIALIZATION
    pop = Population(population)

Затем позвонив по этому номеру:

for x in pop.popList:
    print(x)

Однако в этом случае x - это весь popList, а не один элемент.

1 Ответ

2 голосов
/ 26 апреля 2019

Эта строка:

self.popList.append([pool.apply(Creature.P, args=(self, 0, random.randint(1, 2)))
                     for creature in range(population)])

Должно быть так:

self.popList = [pool.apply(Creature.P, args=(self, 0, random.randint(1, 2)))
                for creature in range(population)]

Вы добавляете список к вашему popList, поэтому вы делаете его списком с одним списком, и этот внутренний список содержит всю совокупность.

Итак, popList в вашем исходном коде будет выглядеть так: [[Creature, Creature, Creature]]

Если вы действительно хотите, чтобы это был просто список Существ: [Creature, Creature, Creature]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...