2017-04-05 1 views
-1

Ich habe eine Datendatei, die Einheitspreise 1 bis 4 zusammen mit anderen Feldern hat. Für einige der Zeilen sind alle vier Einheitspreise angegeben und für einige wenige sind die Einheitspreise leer. Ich habe versucht, den durchschnittlichen Stückpreis für jede Zeile zu berechnen, indem ich Platz durch Null ersetze, aber wenn ich den Durchschnitt mache, möchte ich den Stückpreis mit Leerstelle ignorieren und ihn durch die verbleibende Anzahl von Stücken teilen.Erhalte dynamisch die Anzahl der Teil-Nr. von Feldern, die durch Liste der Listen Iterieren

Eingang: -

10 20 30 40 
30 50 60 
20 10 

Code: -

round(sum(float(v) if v else 0.0 for v in i[2:6])/4,2) 

Ausgang: -

25 
46.66 
15 

Gibt es eine Möglichkeit, die Anzahl der Werte zu bekommen, in die Liste durch Ignorieren von Leerzeichen? Irgendwelche Eingaben würden geschätzt werden. Vielen Dank.

+0

Ist i ein iterabler Wert, der die Zahl in jeder Spalte als String enthält und leere Spalten als Leerzeichen darstellt? – iafisher

+0

Ich bin eine Liste und Eingabe ist eine Liste von Listen .... Ich bin durch Eingabe input und für jeden i Ich mache einige Berechnungen ... In meinem Fall ist ich ein einzelner Datensatz und inputm ist 'n' Nein. von Aufzeichnungen ... – Teja

+0

so haben Sie eine funktionierende Lösung. Versuchen Sie einen "kürzeren" Weg zu finden? – RomanPerekhrest

Antwort

0

Sie können die leeren Einträge herausfiltern und den Mittelwert mit der Python-Standardbibliothek statistics berechnen.

import statistics 

round(statistics.mean(float(x) for x in i[2:6] if x), 2) 
+0

das hat nicht funktioniert: | – Teja

+0

war die Ausgabe falsch oder haben Sie einen Fehler erhalten? Wenn du einen Fehler bekommen hast, was war es? – iafisher

+0

Ich habe einen Fehler bekommen ... – Teja

Verwandte Themen