Mon objectif consiste à additionner la sortie générée à partir d'un code de manière itérative.sommation itérative de sortie générée par une fonction dans une boucle (python)
Le code ci-dessous permet de calculer avec précision la distance de Hamming entre les deux chaînes, mais ne résume pas les distances entre plusieurs chaînes. Voir cordes exemple ci-dessous:
w=['ground', 'joint']
c=['gnoufd', 'johnt']
def hamming_distance(s1, s2):
if len(s1)==len(s2):
return sum(x1 != x2 for x1, x2 in zip(s1, s2))
for x,y in zip(w,c):
for j in x:
for k in y:
l=hamming_distance(x, y)
print l
La sortie du code ci-dessus est: 1
2
J'ai essayé d'utiliser la compréhension de la liste, en espérant que je pourrais obtenir la sortie dans une liste et de les résumer, mais a obtenu la sortie erronée.
for x,y in zip(w,c):
k=[hamming_distance(x,y) for j,k in zip(x,y)]
print k
sortie souhaitée: 3 --- (la somme de l'un et deux ci-dessus)
Toutes les suggestions? Merci.
Remarque: votre 'fonction hamming_distance' ne retourne rien si' LEN (s1) = len (s2) ', qui en Python signifie que la fonction retourne' Aucun '. C'est pourquoi vous obtenez TypeError: type (s) d'opérande non supporté (s) pour les erreurs +: 'int' et 'NoneType'' - vous essayez d'ajouter un 'int' à' None'. Vous devriez probablement décider quoi faire si 'len (s1)' et 'len (s2)' diffèrent, et modifiez 'hamming_distance' en conséquence. Ou, si les distances de Hamming ne sont définies que pour des chaînes de longueur égale, vous devrez soit vous assurer que vous ne passez que des chaînes de longueur égale, soit gérer les 'None's explicitement. – DSM
Merci pour le commentaire DSM, je vais essayer d'utiliser l'exception. – Tiger1
Plutôt que d'utiliser des exceptions, je pense que vous devez regarder comment vous êtes en boucle. Votre boucle «for j in x: for k in y:' ne comparerait pas seulement 'ground' avec' gnoufd' mais avec 'johnt' aussi. – DSM