2017-08-02 2 views
-3

Je voudrais résoudre un problème dans Nodebox3 avec un morceau de code python. C'est une fonctionnalité manquante dans Nodebox 3. Voici ma question:Comparer deux listes (valeurs) et geht Vrai/Faux retour

Je voudrais comparer les valeurs de deux listes différentes et créer une nouvelle liste de sortie. La nouvelle liste devrait avoir les détails de la liste 1 et la liste 2 et le résultat du processus de comparaison. (Vrai ou Faux)

Les numéros dans Liste1 et Liste2 existent une fois dans la liste, mais il est possible qu'ils soient non triés et à différents endroits (index) sur chaque liste à chaque chargement.

My idea Compare Lists and Result

Values List 1 (Master): App1 
1 
2 
3 
4 
5 

Values List 2 (Compare to List 1): App2 
2 
4 

Output (list with Header): 
App1 App2 CompareResult 
1  0  False 
2  2  True  
3  0  False 
4  4  True 
5  0  False 

J'ai essayé de créer un code sur le mien, mais je suis nouveau à la programmation, et il me donne pas de retour le résultat, je suis à la recherche. Il ne me montre que les chiffres correspondants. Et c'est tout. Peut-être que quelqu'un a une idée de la façon dont je reçois le mauvais résultat.

My Code

def matches_out(list1, list2): 
    set1 = set(list1) 
    set2 = set(list2) 
    # set3 contains all items common to set1 and set2 
    set3 = set1.intersection(set2) 
    #return matches 
    found = [] 
    for match in set3: 
     found.append(match) 
    return found 

Si quelqu'un a une idée, je vous remercie pour votre aide.

+0

Salut pour que nous vous aidions plus rapidement, nous devons voir le code sur lequel vous travaillez afin que nous puissions le déboguer ensemble. Salutations – royjavelosa

+0

S'il vous plaît _paste_ tout le code pertinent dans la question. Ne pas lier à des sites tiers. – DyZ

+0

Si vous postez une image de votre code, vous attendez que nous réécrivions tout afin de vous aider. Pourquoi ne pas coller votre code dans la question pour le rendre plus facile? Était-il vraiment plus facile de faire une capture d'écran et de télécharger que de copier du texte? –

Répondre

0

La vérification de l'intersection des deux listes est correcte, mais seulement la moitié de la solution, car elle ne trouve que les correspondances. Vous voulez également signaler les discordances, et pour cela vous avez également besoin de l'union des deux listes.

list1 = [1,2,3,4,5] 
list2 = [2,4] 
matches = set(list1).intersection(list2) 
candidates = set(list1).union(list2) 
result1 = [] # 1st column of output 
result2 = [] # 2nd column of output 
for c in sorted(candidates): 
    result1.append(c if c in list1 else 0) 
    result2.append(c if c in list2 else 0) 
for i in range(len(result1)): 
    print ("{0}\t{1}\t{2}\t".format(result1[i], result2[i], result1[i]==result2[i])) 

qui produit cette sortie:

1 0 False 
2 2 True  
3 0 False 
4 4 True  
5 0 False 

Il est pas clair ce que vous voulez arriver si le même nombre apparaît plus d'une fois dans une liste. Votre code ignore les doublons, j'ai donc suivi la même ligne.

Je vous laisse ajouter les rubriques.

Édition: erreur de coupe et de pas rapportée par OP.

+0

Cher Sanglier. Merci beaucoup pour votre solution et votre aide. Je vois cela fonctionne avec une petite modification "{0". J'essaye maintenant de l'utiliser pour l'implémentation dans Nodebox 3. Excellent travail et merci! Rgs Andy – e2783