2013-02-22 71 views
5

में मैं संख्या की एक श्रृंखला है:प्रारूपण संख्या लगातार अजगर

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

और मैं उन्हें रूप में एक साजिश के कथा में प्रदर्शित करना चाहते हैं:

a 10^(b) 

(साथ ^ अर्थ सुपरस्क्रिप्ट)

ताकि उदाहरण के लिए तीसरा नंबर 3 10^(-3) बन जाता है।

मुझे पता है कि मुझे इसके लिए पाइथन के स्ट्रिंग स्वरूपण ऑपरेटर % का उपयोग करना है, लेकिन मुझे ऐसा करने का कोई तरीका नहीं दिख रहा है। क्या कोई मुझे दिखा सकता है कि कैसे (या मुझे वैकल्पिक तरीका दिखाएं)?

+0

आप str.format को भी आजमा सकते हैं - http://docs.python.org/2/library/string.html#formatstrings – dmg

+0

आप साजिश कैसे बना रहे हैं? क्या यह सिर्फ कुछ ASCII-art-like plot है या आप 'matplotlib' या अन्य पुस्तकालयों का उपयोग कर रहे हैं? – Bakuriu

+0

'% s 10^(% s) '% (संख्या 1, संख्या 2)' काम करता है? – dmg

उत्तर

6

क्या आप वाकई तो दशमलव बिंदु के बाद स्थानों की एक निश्चित संख्या की तुलना में अधिक की जरूरत नहीं है, कर रहे हैं:

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

यहाँ पकड़ पिछले एक प्रारूप के रूप में %.0e उपयोग करने के लिए, आप थे कि है संख्या के रूप में 1e-2

संपादित मुद्रित किया जाएगा: चूंकि आप matplotlib उपयोग कर रहे हैं, तो यह एक अलग कहानी है: आप टेक्स प्रतिपादन इंजन इस्तेमाल कर सकते हैं। एक त्वरित और गंदा उदाहरण:

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

वास्तव में नई .format स्ट्रिंग स्वरूपण के साथ एक छोटे से क्लीनर होगा जो।

EDIT2: बस पूर्णता और भविष्य में संदर्भ के लिए, यहाँ टिप्पणी से ओपी के रास्ते पर मेरी ले रहा है:

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

यहाँ मैं किसी पूर्णांक पर परिवर्तित कर रहा हूँ और वापस अग्रणी शून्य से बचने के लिए: -02 - >-2 आदि

+0

मेरा मानना ​​है कि वह वह नहीं चाहता था जो वह चाहता था। मुझे यहां कोई सुपरस्क्रिप्ट नहीं दिख रहा है। – Bakuriu

+0

क्या कोई तरीका है 1) एक्सपोनेंट को सुपरस्क्रिप्ट में रखें, और 2) 'e' को' 10' से प्रतिस्थापित करें? – rubenvb

+0

@ रुबेनवब मेरा संपादित उत्तर देखें। –

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

आप प्रदर्शित करना चाहते संख्या के साथ tupels की सूची बनाएं। और प्रारूप() का उपयोग करके उन्हें आउटपुट करें। * (ट्यूपल में प्रत्येक आइटम का उपयोग करने के लिए) का उपयोग करने के लिए मत भूलना।