读取Python 3中的遗传算法代码



我正在使用克林顿·谢泼德(Clinton Sheppard(的文本,"与python的遗传算法",并努力同时学习python 3。

我希望那里有人可以帮助我正确解释一些Python 3代码。我的意思是,该代码有效 - 它可以做应该做的事情 - 但是我需要帮助理解原因。这是代码的第一个块:

导入随机

geneSet = " abcdef....zA...Z!."
target = "Hello World!"
def generate_parent(length):
    genes = []
    while len(genes) < length:  # limited to length number of iterations
    sampleSize = min(length - len(genes), len(geneSet))
    print("Current sample size: {}".format(sampleSize))
    print(genes.extend(random.sample(geneSet, sampleSize)))
return ''.join(genes)

基本上,此方法用于从基因集生成一个随机字符串。我认为它是输入参数长度。我假设长度=12。首先,创建一个空列表基因。然后,通过取下(长度 - len(genes(和len(geneset((geneset(。使用12作为最小值(12-0,54(的wire循环(限于长度迭代(可获得一个样品。结果为12.从基因组中取样样品(12(的随机样本,并且基因列表被这样的基因列表扩展。

我很难看到最终的代码"返回'.join(genes("的需求。或循环的经历不仅仅是一次迭代,因为在第二行到最后一行的代码中,基因列表是通过样品从基因组扩展的。

....这只是Hello World :)我认为,与通常情况下,我很明显地忽略了公寓d感谢不同的观点。

谢谢!

"".join(genes) ist用于将基因列表的所有单个条目组合到一个单字符串中。str.join(sequence)采取所有序列的条目,并将它们分开为str。由于作者需要一个仅由基因组成的字符串,因此""用作str,因此字符串中的单个字符无需分开。

使用while循环(如jasonharper已经提到的那样(用于创建一个长度大于gene_set的字符串,因为random.sample()只能从要从中采样的元素选择尽可能多的样本。

我目前正在研究同一本书,也许我们可以互相帮助。

最新更新