2011-09-27 23 views
61

मैं पाइथन 2.6.5 में एक स्ट्रिंग s का निर्माण करता हूं जिसमें %s टोकन की एक अलग संख्या होगी, जो सूची x में प्रविष्टियों की संख्या से मेल खाती है। मुझे एक स्वरूपित स्ट्रिंग लिखने की जरूरत है। निम्नलिखित काम नहीं करता है, लेकिन यह इंगित करता है कि मैं क्या करने की कोशिश कर रहा हूं। इस उदाहरण में, तीन %s टोकन हैं और सूची में तीन प्रविष्टियां हैं।सूचियों के साथ पाइथन स्ट्रिंग स्वरूपण का उपयोग

s = '%s BLAH %s FOO %s BAR' 
x = ['1', '2', '3'] 
print s % (x) 

मैं चाहूँगा होने के लिए उत्पादन स्ट्रिंग:

1 BLAH 2 FOO 3 BAR

उत्तर

17

इस resource page के बाद, अगर एक्स की लंबाई बदलती है, हम उपयोग कर सकते हैं:

', '.join(['%.2f']*len(x)) 

से प्रत्येक तत्व के लिए एक स्थान धारक बनाने के लिए सूची x

x = [1/3.0, 1/6.0, 0.678] 
s = ("elements in the list are ["+', '.join(['%.2f']*len(x))+"]") % tuple(x) 
print s 
>>> elements in the list are [0.33, 0.17, 0.68] 
74
print s % tuple(x) 

बजाय

की
print s % (x) 
+2

'(x)' 'x' जैसा ही है। ब्रैकेट में एक टोकन डालने का कोई मतलब पायथन में नहीं है। आप आमतौर पर पढ़ने के लिए आसान बनाने के लिए 'foo = (bar,)' में ब्रैकेट डालते हैं लेकिन 'foo = bar', वही काम करता है। – patrys

+6

'प्रिंट एस% (एक्स) 'ओपी ने लिखा है, मैं बस उसे उद्धृत कर रहा था। – infrared

+0

मैं सिर्फ एक भाषा टिप प्रदान कर रहा था, आपके जवाब की आलोचना नहीं (वास्तव में मैंने इसे +1 किया)।आपने 'foo = (bar,) 'लिखा नहीं था :) – patrys

99

आप अजगर की format पद्धति के लिए एक अवलोकन करना चाहिए। फिर आप इस तरह अपने प्रारूपण स्ट्रिंग निर्धारित कर सकते हैं:

>>> s = '{0} BLAH {1} BLAH BLAH {2} BLAH BLAH BLAH' 
>>> x = ['1', '2', '3'] 
>>> print s.format(*x) 
'1 BLAH 2 BLAH BLAH 3 BLAH BLAH BLAH' 
+0

केवल पायथन 2.6+। – agf

+1

ओपी 2.6.5 का उपयोग करता है -> ठीक – glglgl

+1

ओपी की समस्या विधि नहीं है लेकिन पैरामीटर का प्रारूप है। '%' ऑपरेटर केवल tuples unpacks। – patrys

11

के बाद से मैं सिर्फ (एक प्रारूप स्ट्रिंग के भीतर से सूचियों में अनुक्रमण) इस अच्छी बात के बारे में सीखा है कि मैं इस वर्ष सवाल का जोड़ रहा: यहाँ उदाहरण है।

s = '{x[0]} BLAH {x[1]} FOO {x[2]} BAR' 
x = ['1', '2', '3'] 
print s.format (x=x) 

हालांकि, मैं अभी भी पता लगा नहीं किया है कैसे (प्रारूप स्ट्रिंग '"{x[2:4]}".format..., के अंदर) टुकड़ा करने की क्रिया करने के लिए है और यह पता लगाने की अगर कोई एक विचार है प्यार होता है, फिर भी मुझे लगता है कि आप बस नहीं कर सकते उस।

+0

मैं स्लाइसिंग के लिए आपके उपयोग के मामले के बारे में थोड़ा उत्सुक हूं। – Michael

+0

मेरे पास वास्तव में एक नहीं है ... मुझे लगता है कि मैंने सोचा कि यह करने में सक्षम होना साफ होगा –

4

यह एक मजेदार सवाल था! परिवर्तनीय लम्बाई सूचियों के लिए .format विधि के साथ इसे संभालने का एक और तरीका एक ऐसे फ़ंक्शन का उपयोग करना है जो सूची अनपॅकिंग का पूर्ण लाभ लेता है। निम्नलिखित उदाहरण में मैं किसी फैंसी स्वरूपण का उपयोग नहीं करता हूं, लेकिन आपकी आवश्यकताओं के अनुरूप इसे आसानी से बदला जा सकता है।

list_1 = [1,2,3,4,5,6] 
list_2 = [1,2,3,4,5,6,7,8] 

# Create a function to easily repeat on many lists: 
def ListToFormattedString(alist): 
    # Each item is right-adjusted, width=3 
    formatted_list = ['{:>3}' for item in alist] 
    s = ','.join(formatted_list) 
    return s.format(*alist) 

# Example output: 
>>>ListToFormattedString(list_1) 
' 1, 2, 3, 4, 5, 6' 
>>>ListToFormattedString(list_2) 
' 1, 2, 3, 4, 5, 6, 7, 8' 
-1

और यह भी यह करने के लिए python 3.6+ में संभव है:

x = ['1', '2', '3'] 
print(f"{x[0]} BLAH {x[1]} FOO {x[2]} BAR") 
0

यहाँ एक सूची पर प्रिंट() के साथ प्रारूप का उपयोग करने के लिए एक छोटे से तात्कालिक जवाब है।

कैसे इस बारे में: (py3)

sample_list = ['cat', 'dog', 'bunny', 'pig'] 
print("Your list of animals are: {}, {}, {} and {}".format(*sample_list)) 

format के प्रयोग पर यहाँ डॉक्स पढ़ें।