0
votes

Comment comparer chaque élément d'un tableau et calculer le pourcentage de combien sont identiques en Python?

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


1 commentaires

Parce que cela a suscité deux réponses différentes, il est temps de donner un autre meilleur exemple.


3 Réponses :


2
votes
print (sum([1 for i in range(len(a)) if a[i] == b[i]])/len(a))

2 commentaires

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!



0
votes

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


0 commentaires

0
votes

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


0 commentaires