2017-10-31 3 views
-5

Ich habe eine Liste, wo ich einen Sinn für den Unterschied zwischen allen Zahlen darin bekommen möchte. Algorithmisch scheint es, als ob ich den absoluten Wert der Subtraktion jedes Gegenstandes von einer Liste von einander nehmen und dann den Durchschnitt der Summe der Subtraktionen finden sollte. Mach dir keine Sorgen über absolute Wert Teil. Das ist nur relevant für meine Anwendung.Ermitteln Sie den durchschnittlichen Unterschied zwischen allen Zahlen in einer Liste (Python)

Zum Beispiel:

list_a = [1,2,3,4] 

list_a0 = (abs(1-2) + abs(1-3) + abs(1-4))/3 = 1+2+3 = 2 
list_a1 = (abs(2-1) + abs(2-3) + abs(2-4))/3 = 1+1+2 = 1.33 
list_a2 = (abs(3-1) + abs(3-2) + abs(3-4))/3 = 2+1+1 = 1.33 
list_a3 = (abs(4-1) + abs(4-2) + abs(4-3))/3 = 3+2+1 = 2 
avg = (lista0 + lista1 + lista2 + lista3)/4 = 1.67 

Ich bin neuere Python. Kann jemand einen Tipp geben, wie man list_a durchläuft, um dies zu tun?

+4

ich habe keine Subtraktion sehen los ... – Tobias

+2

verstehe ich nicht ... Ihr Beispiel scheint nicht auf deine Frage bezogen zu sein. Wo treten diese Subtraktionen auf? Was sind das für Beträge, die du illustrierst? – CoryKramer

+0

Ein Listenverständnis ist zum Erstellen von * Listen *. Erstellst du eine "Liste"? Wenn nicht, dann wollen Sie kein Listenverständnis. Wenn Sie es sind, wollen Sie vielleicht ein Listenverständnis, wenn es schön und lesbar ist. –

Antwort

0

Von Ihrem Beispiel scheint es, dass Sie eine Schleife über alle Permutationen der Liste der Länge 2. Zum Glück versuchen, hat itertools eine Funktion nur für die:

>>> import itertools 
>>> list_a = [1,2,3,4] 
>>> diffs = [abs(e[1] - e[0]) for e in itertools.permutations(list_a, 2)] 
>>> sum(diffs)/len(diffs) 
1.6666666666666667 

Wenn Sie nicht wollen, Verwendung itertools, rate ich eine for-Schleife, anstatt zu versuchen diese in eine verschachtelte Liste Verständnis zu zerquetschen:

>>> list_a = [1,2,3,4] 
>>> diffs = [] 
>>> for i, e in enumerate(list_a): 
     for j, f in enumerate(list_a): 
      if i != j: diffs.append(abs(e-f)) 

>>> sum(diffs)/len(diffs) 
1.6666666666666667 
Verwandte Themen