Python For循环以迭代类列表属性

Python For循环以迭代类列表属性,python,oop,for-loop,Python,Oop,For Loop,我是Python中面向对象编程的新手,遇到了一个障碍。我试图迭代类的list属性,但是我的循环会打印整个列表,而不是每个项目 类别: class Population: def __init__(self, population): self.population = population self.popList = [] pool = ThreadPool(mp.cpu_count()-1) self.popList.a

我是Python中面向对象编程的新手,遇到了一个障碍。我试图迭代类的list属性,但是我的循环会打印整个列表,而不是每个项目

类别:

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):

那么叫这个,

for x in pop.popList:
    print(x)
但是在本例中,
x
是整个
popList
,而不是单个项目。

此行:

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
将以如下方式结束:
[[生物,生物,生物]]

当你真的想要它时,它只是一个生物列表:
[生物,生物,生物]

这行:

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
将以如下方式结束:
[[生物,生物,生物]]

当你真的想要它时,它只是一个生物列表:
[生物,生物,生物]