2009-09-09 22 views
33

मेरे पास कुछ डेटा है जो मैं 3 कॉलम प्रारूप में प्रदर्शित कर रहा हूं,संख्यात्मक डेटा को सही-संरेखित कैसे करें?

key: value key: <tab> key: value <tab> key: value

यहाँ एक उदाहरण है:

p: 1 sl: 10 afy: 4 
q: 12 lg: 10 kla: 3 
r: 0 kl: 10 klw: 3 
s: 67 vw: 9 jes: 3 
t: 16 uw: 9 skw: 3 
u: 47 ug: 9 mjl: 3 
v: 37 mj: 8 lza: 3 
w: 119 fv: 8 fxg: 3 
x: 16 fl: 8 aew: 3 

हालांकि, मैं जैसे, संख्या सब ठीक गठबंधन कर रहे थे चाहते हैं:

a: 1 
b: 12 
c: 123 

मैं कैसे पायथन में ऐसा कर सकते हैं?

print(str(chr(i+ord('a'))) + ": " + str(singleArray[i]) + "\t" + 
    str(doubleArray[i][0]) + ": " + str(doubleArray[i][1]) + "\t" + 
    str(tripleArray[i][0]) + ": " + str(tripleArray[i][1])) 

उत्तर

33

अजगर 2.5 उपयोग rjust में (तारों पर):

यहाँ मैं मौजूदा मुद्रण कोड है। साथ ही, केवल स्ट्रिंग्स को जोड़ने के बजाय पाइथन में string formatting पर उपयोग करने का प्रयास करें। rjust और स्ट्रिंग नीचे फ़ॉर्मेट करने के लिए सरल उदाहरण:

width = 10 
str_number = str(ord('a')) 
print 'a%s' % (str_number.rjust(width)) 
2

आप अपनी संख्या के लिए आ ऊपरी बाध्य जानते हैं, तो आप "%<lenght>d" % n साथ स्वरूपित कर सकते हैं। यह देखते हुए उन सभी गणना किया जाता है और (चार, संख्या) की एक सूची में:

mapping = ((chr(i+ord('a')), singleArray[i]), 
      (doubleArray[i][0],doubleArray[i][1]), 
      (tripleArray[i][0],tripleArray[i][1]) 
      ) 
for row in mapping: 
    print "%s: %3d" % row 
25

उपयोग अजगर स्ट्रिंग स्वरूपण: '%widths' जहां चौड़ाई एक पूर्णांक है

>>> '%10s' % 10 
'  10' 
>>> '%10s' % 100000 
' 100000' 
+17

बाएं संरेखण के लिए '% -10s' का उपयोग करें (बस इसे जोड़ना क्योंकि यह बाएं संरेखण के लिए शीर्ष Google परिणाम है) – Mark

72

अजगर में 2.6+ (और यह है मानक विधि 3), स्ट्रिंग स्वरूपण के लिए "पसंदीदा" विधि string.format() का उपयोग करना है (जिसके लिए पूर्ण दस्तावेज़ here पाया जा सकता है)। सही औचित्य

"a string {0:>5}".format(foo) 

साथ किया जा सकता है, इस 5 स्थानों का उपयोग करेगा, हालांकि

"a string {0:>{1}}".format(foo, width) 

भी वैध है और के रूप में पारित करने के लिए .format मूल्य चौड़ाई का उपयोग करेगा()।

Literal String Interpolation है, जो कम है
+1

मुझे नहीं पता कि यह उत्तर क्यों गलत है क्योंकि यह गलत है - सही-औचित्य/संरेखण के लिए, '" {:> 5} "' '' '' '' '' '' '' '' '' '' ',' या बाएं-गठबंधन है) का उपयोग करना आवश्यक है। सौभाग्य से, जुड़ा हुआ दस्तावेज यह स्पष्ट करता है। (संपादित करें: कभी भी ध्यान न दें, मैं सिर्फ उत्तर को ठीक कर दूंगा और इसे संदर्भ के लिए छोड़ दूंगा।) – Pat

+6

इसे हटा दिया गया है क्योंकि ">" संख्याओं के लिए 'संरेखण' फ़ील्ड का डिफ़ॉल्ट मान है, और प्रश्न संख्याओं के बारे में था। आप सही हैं, हालांकि, यह स्पष्ट करना बेहतर है। –

+1

मी culpa।मुझे यह सवाल मिला क्योंकि मैं तारों को दाएं संरेखित करने की कोशिश कर रहा था, और मैंने ओपी प्रश्न को इतना करीब नहीं पढ़ा कि केवल संख्याएं मुद्रित की जा रही हैं। स्पष्टीकरण देने के लिए धन्यवाद। – Pat

3

अजगर 3.6 में आप उपयोग कर सकते हैं वर्बोज़ और शायद और अधिक उपयोग करने के लिए सहज ज्ञान युक्त:

width = 5 
number = 123 
print (f'{number:>{width}}') 

या बस:

number = 123 
print (f'{number:>5}') 

यह str.format() वाक्य रचना के बहुत पुनः उपयोग कर लेता।

मुझे लगता है/उम्मीद है कि यह भविष्य में पसंदीदा तरीका होगा।

+0

गिटहब: [पाइथन 3.6 के बिना एफ-स्ट्रिंग्स शैली शाब्दिक स्ट्रिंग इंटरपोलेशन का उपयोग करना] (https://github.com/damnever/fmt) –

संबंधित मुद्दे