2013-02-22 13 views
5

Ich habe eine Reihe von Zahlen:Formatieren von Zahlen durchweg in Python

from numpy import r_ 
r_[10**(-9), 10**(-3), 3*10**(-3), 6*10**(-3), 9*10**(-3), 1.5*10**(-2)] 

und ich möchte sie in einem Grundstück Legende in Form angezeigt haben:

a 10^(b) 

(mit ^ Bedeutung Exponent)

so dass z die dritte Nummer wird .

Ich weiß, ich muss Python String-Formatierung Operator % dafür verwenden, aber ich sehe keinen Weg, dies zu tun. Kann mir bitte jemand zeigen wie (oder zeig mir einen alternativen Weg)?

+0

können Sie auch versuchen str.format - http://docs.python.org/2/library/string.html#formatstrings – dmg

+0

Wie erstellen Sie die Handlung? Ist es nur ein ASCII-Kunst-ähnliches Diagramm oder verwenden Sie 'matplotlib' oder andere Bibliotheken? – Bakuriu

+0

funktioniert "% s 10^(% s)"% (number1, number2)? – dmg

Antwort

6

Wenn Sie sicher sind, brauchen Sie nicht mehr als eine bestimmte Anzahl von Stellen nach dem Komma Punkt, dann gilt:

>>> from numpy import r_ 
>>> a = r_[10**(-9), 10**(-3), 3*10**(-3), 6*10**(-3), 9*10**(-3), 1.5*10**(-2)] 
>>> for x in a: print "%.1e"%x 
... 
1.0e-09 
1.0e-03 
3.0e-03 
6.0e-03 
9.0e-03 
1.5e-02 

Der Haken dabei ist, dass Sie %.0e als ein Format zu verwenden waren, die letzten Zahl würde als 1e-2

EDIT gedruckt werden: da Sie matplotlib verwenden, dann ist es eine andere Geschichte: Sie können die TeX-Rendering-Engine nutzen könnten. Ein schnelles und unsauberes Beispiel:

fig = plt.figure() 
ax = fig.add_subplot(111) 

x = 1.5*10**(-2) 
l = ("%.0e"%x).split("e") 
x_str = r"$ %s \times 10^{%s}$" % (l[0], l[1]) 

ax.set_title(x_str) 

plt.show() 

die in der Tat würde ein wenig saubere mit neuer .format String Formatierung sein.

EDIT2: Nur der Vollständigkeit halber und zukünftige Referenz, hier ist mein nehmen auf dem Weg des OP aus den Kommentaren:

x = 1.5*10**(-2) 
l = ("%.0e"%x).split("e") 
x_str = r"$%s \times 10^{%s}$" % (l[0], str(int(l[1]))) 

Hier in einen int Ich bin Umwandlung und führende Nullen zu vermeiden zurück: -02 - >-2 usw.

+0

Ich glaube, das ist nicht das, was er wollte. Ich sehe hier keine Hochstellung. – Bakuriu

+0

Gibt es eine Möglichkeit, 1) den Exponenten hochzustellen und 2) das "e" durch eine "10" zu ersetzen? – rubenvb

+0

@rubenvb sehe meine bearbeitete Antwort. –

0
list_item = (multiply_number,degree_number) 
displayed_items = [list_item, list_item, ....] 
for item in displayed_items: 
    print '{0}*10^({1})'.format(*item) 

erstellen Liste von Tupeln mit Nummer, die Sie anzeigen möchten. Und gib sie einfach mit format() aus. Vergessen Sie nicht, * zu verwenden (dies für die Verwendung jedes Elements im Tupel).

Verwandte Themen