I am working on a genetic algorithm, and I found a code that works, and now I am trying to understand, but I saw this return statement:
return sum(1 for expected, actual in zip(target, guess)
  if expected == actual)
What does it do?
Here is the full code:
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
population.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)
This is the full code of an working genetic algorithm. I modified some parts to make it more readable for me.
The return statement is in the population.py file, in the get_fitness function.
 
     
     
    