gpt4 book ai didi

python - 这个返回语句是什么意思? Python

转载 作者:太空狗 更新时间:2023-10-30 02:16:09 24 4
gpt4 key购买 nike

我正在研究遗传算法,我找到了一个有效的代码,现在我试图理解,但我看到了这个返回语句:

return sum(1 for expected, actual in zip(target, guess)
if expected == actual)

它有什么作用?

完整代码如下:

主要.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 函数中。

最佳答案

让我们分解一下:

return sum(1 for expected, actual in zip(target, guess)
if expected == actual)

可以写成:

total = 0
for i in range(len(target)):
if target[i] == guess[i]:
total = total + 1
return total

zip(a, b) 列出来自 ab 的项目对,例如:

zip([1, 2, 3], ['a', 'b', 'c'])

产生 [(1, 'a'), (2, 'b'), (3, 'c')]。所以 zip(target, guess) 表达式返回一个列表,其中包含 target 的第一项和 guess 的第一项,然后是第二项来自 target,第二个来自 guess,依此类推。

for expected, actual in zip() 位从 zip() 的输出中解压值对,所以第一个对中的一个(来自 target)转到变量 expected,对中的第二个(来自 guess)转到变量 >实际

1 ... if expected == actual 位表示“如果 expected 中的值,则为 zip() 中的每个项目发出值 1 等于 actual 中的值。

sum() 将 for 循环中 1 值的数量相加。

哒哒!现在您有了预期值和实际值相同的项目数。以这种方式编写它有几个原因:

  1. 非常简洁但富有表现力。写了很多 Python 的人可以看一眼就明白了。
  2. 它可能非常快,因为 Python 解释器正在处理循环、条件等,并且对 Python 解释器的改进可以使代码更快,而无需理解整个程序。基本上,您是在告诉 Python“我想完成这件事”,而不是“这里有 100 个小步骤来完成这件事”。

关于python - 这个返回语句是什么意思? Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45828207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com