2013-02-22 21 views
5

I sayı dizisi vardır:Biçimlendirme numaraları tutarlı Python

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

ve onları formda parselin efsane görüntülenmesini istiyorum:

a 10^(b) 

(ile ^ anlam üst simge

, örn. Üçüncü sayı 3 10^(-3) olur.

Bunun için Python'un dize biçimlendirme operatörü %'u kullanmam gerektiğini biliyorum, ancak bunu yapmanın bir yolunu görmüyorum. Birisi bana nasıl olduğunu gösterebilir mi (ya da bana alternatif bir yol gösterir)?

+0

str.format'ı da deneyebilirsiniz - http://docs.python.org/2/library/string.html#formatstrings – dmg

+0

Grafiği nasıl oluşturuyorsunuz? Sadece bazı ASCII-art-benzeri arsa mı yoksa "matplotlib" mi yoksa başka kütüphaneler mi kullanıyorsunuz? – Bakuriu

+0

'% s 10^(% s) '% (sayı1, sayı2)' çalışır? – dmg

cevap

6

Eğer o zaman, ondalık nokta sonra yerlerde bir sabit sayıdan fazla gerekmez eminseniz:

>>> 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 

burada yakalamak, bir biçimi olarak son %.0e kullanılacağını olduğudur numara 1e-2

EDIT'e olarak basılmış olacaktır: Eğer matplotlib kullandığınız için, o zaman farklı bir hikaye: Eğer TeX render motorunu kullanabilirsiniz. Kirli hızlı ve-örnek:

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() 

gerçekten yeni .format dize biçimlendirme ile biraz daha temiz olacağını.

EDIT2: Sadece şeyiyle ve ileride başvurmak üzere, burada yorumlardan OP'ın yolda almak benim:

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

Ben bir int dönüştürürken ediyorum ve geri baştaki sıfırlar önlemek için: -02 - >-2 vb

+0

Bunun istediği gibi olmadığına inanıyorum. Burada üst simge göremiyorum. – Bakuriu

+0

1) Üstbilgiyi üst simge haline getirmenin bir yolu var mı, ve 2) "e" yi "10" ile değiştirin? – rubenvb

+0

@rubenvb benim düzenlenmiş cevabımı görüyor. –

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

görüntülemek istediğiniz sayı ile tupels listesini oluşturun. Ve sadece bunları format() kullanarak çıktılar. Kullanmayı unutmayın * (bu, her bir öğeyi tuple'da kullanmak için).