2017-04-19 11 views
0

Ich habe zwei Listen arr_list1 und arr_list2, die beide Listen von Listen sind. sie sind beide genau gleich groß. Ich muss zählen, wie viele Elemente sich pro Liste unterscheiden. zum Beispiel würdeZählfehler in der Liste der Listen

arr_list1 = [[0,1,1],[0,1,0],[1,0,1]] 
arr_list2 = [[0,1,0],[1,1,1],[1,0,1]] 

Ich mag result = (1,2,0) erhalten

Gibt es eine 'einfache' Art und Weise, dies zu tun, die Schleifen erfordern doesnt?

+0

Beide Listen haben das gleiche n ame –

+0

Sofern Sie nicht bereit sind, einen DataFrame zu verwenden, wäre eine Iteration über die Listen die beste Option. Wenn du sie nebeneinander vergleichst, wäre 'zip' dein Freund. –

Antwort

0

Sie zip verwenden können, um die Unterschiede zu vergleichen:

arr_list1 = [[0,1,-1],[0,1,0],[1,0,1]] 
arr_list2 = [[0,1,0],[1,1,1],[1,0,1]] 

def get_differences(arr_list1, arr_list2): 
    all_differences = [] 
    for a, b in zip(arr_list1, arr_list2): 
     sum_differences = 0 
     for a_item, b_item in zip(a, b): 
      if a_item != b_item: 
       sum_differences += 1 
     all_differences.append(sum_differences) 
    return all_differences 

print get_differences(arr_list1, arr_list2) 
+0

Ja, Sie nähern sich vollkommen, aber die Liste enthält tatsächlich -1 und 1, nicht 0 und 1! Ich habe das nur zur Klarheit in der Frage verwendet. Gibt es eine Möglichkeit, dies so zu modifizieren, dass es auf der Grundlage von Nichtübereinstimmungen zwischen Werten funktioniert, anstatt die Subtraktion der beiden zu übernehmen? –

+0

Ich habe meine Antwort bearbeitet, um einen Standardvergleich durchzuführen. Vielen Dank. –

0

Gerade iterieren zwei Listen und verwenden sum() Verfahren die Nichtübereinstimmungen zu zählen

a1 = [[0,1,1],[0,1,0],[1,0,1]] 
a2 = [[0,1,0],[1,1,1],[1,0,1]] 


print [sum([a1[i][j]!=a2[i][j] for j in range(len(a1[i]))]) for i in range(len(a1))] 

Ausgang:

[1, 2, 0] 
1
import numpy as np 
arr_list1 = [[0,1,1],[0,1,0],[1,0,1]] 
arr_list2 = [[0,1,0],[1,1,1],[1,0,1]] 
print np.sum(np.asarray(arr_list1) != np.asarray(arr_list2),axis=1)