2016-06-17 8 views
1

Ich mache eine Berechnung mit Python. In einem Schritt wird es Array sein, die Python: float Nummer erhalten Teil vor "e"

[1.23e-21, 2.32e-14, 8.87e-12, .....] 

wie

sieht Ich will nur den Teil vor e.. erhalten, das heißt, ich möchte Array

[1.23, 2.32, 8.87,.....] 

Gibt es eine Methode, dies zu tun bekommen?

+0

alle Zahlen Sie genau zwei Nachkommastellen haben? – Keiwan

+0

@Keiwan Nein, sie sind zufällig – gladys0313

+0

Was ist das für? Indem Sie den Teil vor dem 'e' nehmen, multiplizieren Sie Ihre Zahlen mit im Wesentlichen beliebigen 10er-Potenzen. Es scheint eine seltsame Sache zu sein. –

Antwort

4

eine von möglicherweise vielen Lösungen:

from math import floor, log10 

x = [1.23e-21, 2.32e-14, 8.87e-12, 1.51, 1.214e10] 

res = [t/10**floor(log10(abs(t))) if t!= 0 else 0 for t in x] 
+1

I kleine Ecke, die Sie aufpassen müssen, ist 't == 0': in diesem Fall ist 'log10' undefined. –

+0

Sie haben Recht. Ich habe auch vergessen, für negative Werte zu sorgen – DomTomCat

+0

Vielen Dank! Es ist wirklich eine gute Methode – gladys0313

2

Sie können die Einträge in Strings konvertieren und verteilen sie an der e. Kombiniert man dies mit Liste Verständnis und Sie erhalten:

numbers = [1.23e-21, 2.32e-14, 8.87e-12] 

result = [float(str(i).split('e')[0]) for i in numbers] 

Wenn alle Ihre Zahlen haben genau zwei Dezimalstellen, können Sie den Abschnitt-Operator für Streicher und Liste Verständnis verwenden:

result = [float(str(i)[:4]) for i in numbers] 
+0

Dies wird für Zahlen fehlschlagen, die normalerweise nicht in wissenschaftlicher Notation dargestellt werden; besser explizite String-Formatierung verwenden. –

+0

@tobias_k Könnten Sie mir vielleicht ein Beispiel für eine Nummer geben, für die das nicht funktionieren würde, damit ich besser verstehen kann, was Sie meinen? – Keiwan

+0

Zum Beispiel würde "math.pi" mit 11 Nachkommastellen nach dem Punkt gedruckt, oder "12345.6" hätte immer noch 5 Ziffern vor dem Punkt. Mit '"% .2e "% x' erhalten Sie für jede Zahl die gleiche Anzahl an signifikanten Ziffern, egal wie groß. –