【发布时间】:2018-01-31 08:44:24
【问题描述】:
我正在研究一种遗传算法,我找到了一个有效的代码,现在我试图理解,但我看到了这个返回语句:
return sum(1 for expected, actual in zip(target, guess)
if expected == actual)
它有什么作用?
这里是完整的代码:
main.py:
from population import *
while True:
child = mutate(bestParent)
childFitness = get_fitness(child)
if bestFitness >= childFitness:
continue
print(child)
if childFitness >= len(bestParent):
break
bestFitness = childFitness
bestParent = child
人口.py:
import random
geneSet = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!.,1234567890-_=+!@#$%^&*():'[]\""
target = input()
def generate_parent(length):
genes = []
while len(genes) < length:
sampleSize = min(length - len(genes), len(geneSet))
genes.extend(random.sample(geneSet, sampleSize))
parent = ""
for i in genes:
parent += i
return parent
def get_fitness(guess):
return sum(1 for expected, actual in zip(target, guess)
if expected == actual)
def mutate(parent):
index = random.randrange(0, len(parent))
childGenes = list(parent)
newGene, alternate = random.sample(geneSet, 2)
childGenes[index] = alternate \
if newGene == childGenes[index] \
else newGene
child = ""
for i in childGenes:
child += i
return child
def display(guess):
timeDiff = datetime.datetime.now() - startTime
fitness = get_fitness(guess)
print(str(guess) + "\t" + str(fitness) + "\t" + str(timeDiff))
random.seed()
bestParent = generate_parent(len(target))
bestFitness = get_fitness(bestParent)
print(bestParent)
这是有效遗传算法的完整代码。我修改了一些部分,使其更具可读性。
return 语句在 population.py 文件中的 get_fitness 函数中。
【问题讨论】:
-
这叫做列表理解。如果您发布更多代码会有所帮助
-
@vaultah 这是一个生成器表达式而不是列表推导。不过,您提供的链接确实提供了对一般理解的解释,所以我也会投票关闭重复项。
-
@ChristianDean:这是要求解释理解和生成器表达式的问题的规范副本。不过,我没有投票决定将其关闭。
标签: python python-3.x return