2016-12-21 2 views
0

Ich möchte den Code vereinfachen:Verbesserung der eine gewundene mathematische Funktion in Python

def function(data): 
ss, s, n = reduce(lambda a, b: map(sum, zip(a,b)), [(x*x, x, 1) for x in data]) 
return (ss - s*s/n)/n 

Bisher habe ich herausgefunden, dass ss, s und n die Summe der quadratischen Terme in Daten die Summe der Terme in Daten bzw. die Anzahl der Terme in Daten. Mit diesem Wissen vereinfachte ich die Rückgabeerklärung auf (Durchschnitt der quadrierten Terme) - (Avg. Quadrat). Gibt es eine bessere Möglichkeit, den Code zu vereinfachen und dieselbe Ausgabe zu erhalten? Vielen Dank im Voraus

+2

sein Was ist das * Problem * mit diesem Code? Was würdest du als einfacher betrachten? Verstehst du, was es jetzt macht? – jonrsharpe

Antwort

0

Ein Anfänger freundliche Umsetzung des obigen Code würde

def function(data): 
#get sum of squares 
    sum_of_squares = sum(i*i for i in data) 
#get sum 
    sum_of_items = sum(data) 
#total elements 
    total_elements = len(data) 
#same func 
+1

'sum (i * i für i in Daten)' ist schneller, da es keine Liste vor der Berechnung der Summe erstellt. –

+0

Sicher, siehe bearbeiten. Wird das Argument der Summe hier als Generatorverständnis betrachtet? Ich bin ein wenig verwirrt durch den Mangel an umgebenden Klammern usw. – themistoklik

+0

ja, das * ist * ein Generator. –

Verwandte Themen