J'ai deux tableaux:
ValueError: too many values to unpack (expected 2)
Je veux chaque élément des deux tableaux (je veux dire que je veux comparer dans l'ordre, comme comparer aaa [0] & bbb [0], aaa [1] & bbb [1]), s'ils sont identiques, retournent 1 et calculent la somme, sinon, retournent 0, et calculent le pourcentage des mêmes éléments, dans cet exemple, la sortie attendue serait: 2 / 4
J'ai écrit une fonction comme celle-ci:
def result_check(a,b):
for i,j in range(len(a)), range(len(a)):
if a==b:
return 1
else:
return 0
mais le résultat de 'check (aaa, bbb)' est 0 car il a comparé le tableau dans un tout, alors j'ai essayé:
def check(a,b):
if a==b:
return 1
else:
return 0
mais m'a donné une erreur:
aaa = ['hello','banana','apple','lemon'] bbb = ['fruits','banana','apple','pear']
comment puis-je obtenir le résultat dont j'ai besoin? Merci beaucoup
3 Réponses :
print (sum([1 for i in range(len(a)) if a[i] == b[i]])/len(a))
Salut merci pour la réponse, mais je veux aussi vérifier l'ordre des éléments, si a [0] = b [0], nous comptons, pas seulement si a dans b nous comptons
Merci beaucoup!
Utilisez des ensembles comme dans l'autre réponse. Si vous souhaitez obtenir des indices où tout est égal, cela peut être utile car ccc contient des entrées True ou False uniquement
ccc = [el[0] == el[1] for el in zip(aaa, bbb)] sum(ccc)/len(ccc)
Résultat: 0.5
Eh bien, tout d'abord, il vous manque une indentation pour vos déclarations de fonction. Puisque vous avez réussi à obtenir l'erreur de décompression, le code réel est vraisemblablement formaté correctement et vous l'avez mal copié. Quant à votre code, il y a tellement de choses qui ne vont pas avec lui, il est difficile de savoir par où commencer: vous bouclez sur deux variables différentes ( i et j ) et deux plages lorsque vous devriez en avoir un, vous n'utilisez pas réellement les variables de la boucle, vous comparez toujours les listes entières à chaque itération de la boucle et vous revenez dans la boucle, ce qui signifie qu'elle se terminera la première itération.
Ce qui suit obtiendrait une liste des résultats:
import pandas as pd a = pd.Series(aaa) b = pd.Series(bbb) matching_percentage = (a==b).mean()
Mais vous pouvez simplement faire
def result_check(a,b):
return([a[i] == b[i] for i in range(len(a)))
(Cela renverra une liste de True / False , mais lorsque vous prenez la somme, ils seront forcés à des entiers.
Avec le Paquet Pandas, c'est encore plus simple:
def result_check(a,b):
result_list = [None]*(len(a))
for i in range(len(a)):
if a[i]==b[i]:
result_list[i] = 1
else:
result_list[i] = 0
return result_list
Parce que cela a suscité deux réponses différentes, il est temps de donner un autre meilleur exemple.