पायथन में स्ट्रिंग प्रारूपण के साथ मुद्रण टपल


127

इसलिए, मुझे यह समस्या है। मुझे ट्यूपल (1,2,3) मिला जिसे मुझे स्ट्रिंग फॉर्मेटिंग के साथ प्रिंट करना चाहिए। जैसे।

tup = (1,2,3)
print "this is a tuple %something" % (tup)

और यह ब्रैकेट के साथ टपल प्रतिनिधित्व को प्रिंट करना चाहिए, जैसे

यह एक टपल है (1,2,3)

लेकिन मुझे TypeError: not all arguments converted during string formattingइसके बदले मिलता है ।

दुनिया में मैं यह कैसे कर पा रहा हूं? अगर आप लोग मुझे एक सही दिशा की ओर इशारा कर सकते हैं तो किंडा यहां हार गया :)

जवाबों:


201
>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)

एकमात्र आइटम यानी (thetuple,)भाग के रूप में रूचि के एकल के साथ एक सिंगलटन टपल बनाना , यहाँ महत्वपूर्ण बिट है।


पायथन में 3 प्रिंट एक फ़ंक्शन है, एक बयान नहीं है, इसलिए आपको लिखना होगा print(....)
JG

53

ध्यान दें कि %सिंटैक्स अप्रचलित है। उपयोग करें str.format, जो सरल और अधिक पठनीय है:

t = 1,2,3
print 'This is a tuple {0}'.format(t)

मैंने 1 आइटम ट्यूपल के मामले के लिए इस stackoverflow.com/a/26249755/1676424 पर एक टिप्पणी जोड़ी
याकूब CUI

मुझे कभी नहीं पता था कि %अप्रचलित क्यों है, लेकिन मैं अब आपको हमेशा str.formatवैसे भी, आँख बंद करके। कोई बात नहीं, मुझे लगता है कि पूर्ण क्वालिफायर क्या है, में दिलचस्पी रखता हूं, क्योंकि साधारण {0}पूर्ण क्वालिफायर नहीं है, लेकिन केवल एक स्थिति संकेतक है। एक के लिए int, जिसे मैं पूर्ण योग्यता कहता हूं, वह होगा {0:d}(या {3:d}उदाहरण के लिए, यदि मुद्रित किया जाने वाला उदाहरण str.formatविधि में 4 वें स्थान पर होता है )। मैंने {0:s}क्वालीफायर का उपयोग करके एक टपल प्रिंट करने की कोशिश की है लेकिन यह काम नहीं करता है। तो, एक टपल की तरह कुछ के लिए पूर्ण क्वालीफायर क्या है?
रे

1
@ रे कि वास्तव में कोई मतलब नहीं है। आपके द्वारा निर्दिष्ट बहुत सारे विकल्प हैं, जो प्रलेखन में पाए जा सकते हैं। यदि आप कुछ strकहना चाहते हैं, तो आप इसे प्रिंट कर सकते हैं {!s}, लेकिन यह डिफ़ॉल्ट है, इसलिए यह अनावश्यक है। यदि आप reprइसके बजाय उपयोग करना चाहते हैं , तो आप कर सकते हैं {!r}। इसके विपरीत %, dपूर्णांकों के लिए कहने की आवश्यकता नहीं है ।
एंटीमनी

2
मुझे% सिंटैक्स पसंद है क्योंकि यह नए प्रारूप की तुलना में मेरे दिमाग में कम क्रिया है, और सी स्ट्रिंग प्रारूपण के समान भी है, जिसे मैं जानता हूं और प्यार करता हूं
पॉलस

ध्यान दें कि, पायथन 3 पर भी, %पूरी तरह से अप्रचलित नहीं है। वास्तव में, pylintयहां तक ​​कि अगर आप मॉड्यूल के .formatभीतर वाक्यविन्यास का उपयोग करते हैं तो भी शिकायत करेंगे logging: stackoverflow.com/a/34634301/534238
माइक विलियमसन

39

ऊपर दिए गए कई उत्तर सही थे। इसे करने का सही तरीका है:

>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)

हालांकि, इस बात पर विवाद था कि क्या '%'स्ट्रिंग ऑपरेटर अप्रचलित है। जैसा कि कई ने बताया है, यह निश्चित रूप से अप्रचलित नहीं है, क्योंकि '%'स्ट्रिंग ऑपरेटर को सूची डेटा के साथ स्ट्रिंग स्टेटमेंट को संयोजित करना आसान होता है।

उदाहरण:

>>> tup = (1,2,3)
>>> print "First: %d, Second: %d, Third: %d" % tup
First: 1, Second: 2, Third: 3

हालांकि, .format()फ़ंक्शन का उपयोग करके , आप एक क्रिया कथन के साथ समाप्त हो जाएंगे।

उदाहरण:

>>> tup = (1,2,3)
>>> print "First: %d, Second: %d, Third: %d" % tup
>>> print 'First: {}, Second: {}, Third: {}'.format(1,2,3)
>>> print 'First: {0[0]}, Second: {0[1]}, Third: {0[2]}'.format(tup)

First: 1, Second: 2, Third: 3
First: 1, Second: 2, Third: 3
First: 1, Second: 2, Third: 3

इसके अलावा अधिक, '%'यह भी स्ट्रिंग ऑपरेटर हमें इस तरह के रूप डेटा प्रकार को मान्य करने के लिए उपयोगी %s, %d, %i, जबकि .format () केवल दो रूपांतरण झंडे का समर्थन : '!s'और '!r'


मैंने प्रारूप का उपयोग करने के लिए परिवर्तन किया है (), लेकिन% पद्धति का यह लाभ (एक ट्यूपल के प्रत्येक तत्व को प्रारूपित करने और रूपांतरण करने में सक्षम होने के कारण) बड़ा है, इसलिए मुझे लगता है कि मैं वापस जाऊंगा। धन्यवाद।
बिल

1
आप प्रत्येक तत्व के लिए प्रारूप को भी निर्दिष्ट कर सकते हैं। '{: d} {: s}'। स्वरूप (1, '2')
zk82

5
"तारांकन अनपैक" टपल के साथ अच्छी तरह से काम करता है .format: tup = (1,2,3); print('First: {}, Second: {}, Third: {}'.format(*tup))
m-dz

25
>>> tup = (1, 2, 3)
>>> print "Here it is: %s" % (tup,)
Here it is: (1, 2, 3)
>>>

ध्यान दें कि (tup,)एक टपल है जिसमें एक टपल है। बाहरी ट्यूपल% ऑपरेटर का तर्क है। आंतरिक टपल इसकी सामग्री है, जो वास्तव में मुद्रित होती है।

(tup)कोष्ठक में एक अभिव्यक्ति है, जिसका मूल्यांकन किए जाने पर परिणाम सामने आते हैं tup

(tup,)ट्रेलिंग कॉमा के साथ एक ट्यूपल है, जिसमें tupकेवल सदस्य के रूप में शामिल है।


9

यह स्ट्रिंग प्रारूपण का उपयोग नहीं करता है, लेकिन आपको ऐसा करने में सक्षम होना चाहिए:

print 'this is a tuple ', (1, 2, 3)

यदि आप वास्तव में स्ट्रिंग स्वरूपण का उपयोग करना चाहते हैं:

print 'this is a tuple %s' % str((1, 2, 3))
# or
print 'this is a tuple %s' % ((1, 2, 3),)

ध्यान दें, यह मानता है कि आप 3.0 से पहले पायथन संस्करण का उपयोग कर रहे हैं।


7
t = (1, 2, 3)

# the comma (,) concatenates the strings and adds a space
print "this is a tuple", (t)

# format is the most flexible way to do string formatting
print "this is a tuple {0}".format(t)

# classic string formatting
# I use it only when working with older Python versions
print "this is a tuple %s" % repr(t)
print "this is a tuple %s" % str(t)

6

हालांकि यह प्रश्न काफी पुराना है और इसके कई अलग-अलग उत्तर हैं, फिर भी मैं imho सबसे "पायथोनिक" जोड़ना चाहूंगा और यह भी पठनीय / संक्षिप्त उत्तर होगा।

चूंकि सामान्य tupleमुद्रण विधि पहले से ही एंटीमनी द्वारा सही ढंग से दिखाई गई है, इसलिए यह प्रत्येक तत्व को अलग-अलग एक टपल में प्रिंट करने के लिए है, क्योंकि फोंग का चुन को %sवाक्य रचना के साथ सही ढंग से दिखाया गया है ।

दिलचस्प रूप से यह केवल एक टिप्पणी में उल्लिखित किया गया है, लेकिन टपल तत्वों को अनपैक करने के लिए तारांकन ऑपरेटर का उपयोग करके अलग-अलग तत्वों को प्रिंट करते समयstr.format विधि का उपयोग करके पूर्ण लचीलापन और पठनीयता प्राप्त होती है ।

tup = (1, 2, 3)
print('Element(s) of the tuple: One {0}, two {1}, three {2}'.format(*tup))

यह एकल-तत्व टपल को प्रिंट करने के दौरान ट्रेलिंग कॉमा को प्रिंट करने से भी रोकता है, जैसा कि याकूब CUI द्वारा किया गया है replace। (भले ही पीछे चल रहे अल्पविराम प्रतिनिधित्व सही है अगर मुद्रण के प्रकार प्रतिनिधित्व को संरक्षित करना चाहते हैं )

tup = (1, )
print('Element(s) of the tuple: One {0}'.format(*tup))

5

मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका है:

t = (1,2,3)

print "This is a tuple: %s" % str(t)

यदि आप प्रिंटफ़ शैली प्रारूपण से परिचित हैं , तो पायथन अपने स्वयं के संस्करण का समर्थन करता है। पायथन में, यह स्ट्रिंग्स (मॉडुलो ऑपरेटर का एक अधिभार) पर लागू "%" ऑपरेटर का उपयोग करके किया जाता है, जो किसी भी स्ट्रिंग को लेता है और उस पर प्रिंटफ-स्टाइल स्वरूपण लागू करता है।

हमारे मामले में, हम इसे "यह एक टपल है:" प्रिंट करने के लिए कह रहे हैं, और फिर एक स्ट्रिंग "% s" जोड़ रहे हैं, और वास्तविक स्ट्रिंग के लिए, हम टपल के स्ट्रिंग प्रतिनिधित्व में गुजर रहे हैं (str कॉल करके () टी))।

यदि आप प्रिंटफ शैली प्रारूपण से परिचित नहीं हैं, तो मैं सीखने का सुझाव देता हूं, क्योंकि यह बहुत मानक है। अधिकांश भाषाएं एक तरह से या किसी अन्य तरीके से इसका समर्थन करती हैं।


2

कृपया ध्यान दें कि यदि केवल एक आइटम है, तो एक अल्पविराम अल्पविराम जोड़ा जाएगा। उदाहरण के लिए:

t = (1,)
print 'this is a tuple {}'.format(t)

और आपको मिलेगा:

'this is a tuple (1,)'

कुछ मामलों में जैसे आप एक उद्धृत सूची प्राप्त करना चाहते हैं जैसे कि mysql क्वेरी स्ट्रिंग में इस्तेमाल किया जा सकता है

SELECT name FROM students WHERE name IN ('Tom', 'Jerry');

स्वरूपण के बाद आपको टेलिंग कॉमा उपयोग की जगह (',', '' '') को हटाने पर विचार करने की आवश्यकता है क्योंकि यह संभव है कि टपल में केवल 1 आइटम ('टॉम') हो, इसलिए टेलिंग कॉमा को हटाने की आवश्यकता है:

query_string = 'SELECT name FROM students WHERE name IN {}'.format(t).replace(',)', ')')

कृपया सुझाव दें कि क्या आपके पास आउटपुट में इस अल्पविराम को हटाने का सभ्य तरीका है।


1
मैं आमतौर पर कुछ इस तरह से पसंद करता हूं 'यह एक ट्यूपल ({})' है। प्रारूप (',' .join (नक्शा (str, t)))। इस तरह आपको प्रारूप स्ट्रिंग में मौजूदा अल्पविराम या कोष्ठक के साथ खिलवाड़ करने की चिंता करने की आवश्यकता नहीं है।
एंटिमोनी

1
आपको format()डेटाबेस प्रश्नों में उपयोग नहीं करना चाहिए । हर लाइब्रेरी में इसके लिए लागू तरीके हैं।
कार्तिक

@ktalik आप इसे स्पष्ट रूप से नहीं समझते हैं। प्रारूप () का डेटाबेस के प्रश्नों से कोई लेना-देना नहीं है। प्रारूप () अजगर स्ट्रिंग ऑपरेशन के लिए सामान्य कार्य है। Docs.python.org/2/library/string.html पर एक नज़र डालें और आप इससे सीखेंगे। डेटाबेस प्रश्नों से कोई लेना-देना नहीं है।
याकूब CUI

format()उपयोगकर्ताओं से एकत्र किए गए मानों का उपयोग करने से SQL इंजेक्शन लग सकता है। क्वेरी में डालने से पहले इनपुट मानों को मान्य करना अधिक सुरक्षित है। अधिक जानकारी के लिए ये दिशानिर्देश देखें: dev.mysql.com/doc/connector-python/en/… आप किसी डेटाबेस प्रकार स्ट्रिंग प्रतिनिधित्व के लिए पैरामीटर मान भी डाल सकते हैं और फिर इसे क्वेरी स्ट्रिंग पर चिपका सकते हैं। Initd.org/psycopg/docs/usage.html पर एक नज़र डालें जहां आपके पास %ऑपरेटर के साथ एक प्रतिसाद है और execute()विधि के साथ एक समाधान है जहां विधि पैरामीटर में क्वेरी पैरामीटर पारित किए जा रहे हैं।
ktalik

1
@ पाओल रूनी कृपया ध्यान दें कि मैं समझाने की कोशिश कर रहा हूं, यदि टुपल में केवल एक आइटम है तो एक अनुगामी अल्पविराम जोड़ा जाएगा। और यह सही ढंग से उपयोग नहीं करने पर परेशानी का कारण होगा। इसके अलावा प्रारूप निश्चित रूप से एसक्यूएल प्रश्न बनाने के लिए इस्तेमाल किया जा सकता है। कहाँ से आया अवगुण ??
जैकब CUI


0

उत्तर पाने के लिए इसे आज़माएं:

>>>d = ('1', '2') 
>>> print("Value: %s" %(d))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

अगर हम केवल एक-एक नल लगाते हैं (), तो यह स्वयं एक नल बनाता है:

>>> (d)
('1', '2')

इसका मतलब है कि उपरोक्त प्रिंट स्टेटमेंट इस तरह दिखाई देगा: प्रिंट ("मूल्य:% s"% ('1', '2')) जो एक त्रुटि है!

अत:

>>> (d,)
(('1', '2'),)
>>> 

ऊपर प्रिंट के तर्कों को सही ढंग से खिलाया जाएगा।



0

आप इसे भी आज़मा सकते हैं;

tup = (1,2,3)
print("this is a tuple {something}".format(something=tup))

आप उपयोग नहीं कर सकते %somethingके साथ (tup)सिर्फ इसलिए कि पैकिंग और टपल साथ अवधारणा खोल की।


-5

बात सस्ती है, आपको कोड दिखाते हैं:

>>> tup = (10, 20, 30)
>>> i = 50
>>> print '%d      %s'%(i,tup)
50  (10, 20, 30)
>>> print '%s'%(tup,)
(10, 20, 30)
>>> 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.