2009-08-04 16 views
85

स्वरूपण मैं इस फार्मएक ही मूल्य कई बार सम्मिलित करना जब एक स्ट्रिंग

s='arbit' 
string='%s hello world %s hello world %s' %(s,s,s) 

के एक स्ट्रिंग है सभी% s स्ट्रिंग में एक ही मूल्य (अर्थात रों) है। क्या यह लिखने का एक बेहतर तरीका है? (बल्कि तीन बार बाहर रों लिस्टिंग से)

+0

डुप्लिकेट: http://stackoverflow.com/questions/543399/python-string-formatting – bignose

+2

यह '%' स्ट्रिंग ऑपरेटर "पाइथन 3.1 पर बहिष्कृत किया जाएगा और बाद में कुछ समय बाद हटा दिया जाएगा" http: //docs.python .org/release/3.0.1/whatsnew/3.0.html # pep-3101-a-new-approach-to-string-formatting अब मुझे आश्चर्य है कि संस्करण संगतता और सुरक्षा दोनों के लिए सबसे अधिक सलाह दी गई तरीका क्या है। – cregox

+2

@ कावासा मुझे पता है कि यह बहुत देर हो चुकी है, लेकिन मुझे 'str.format()' का उपयोग करना पसंद है। पूर्व .: 'query =" चुनें {name_arg} से "; query.format (** kwargs) ', जहां' क्वेरी' प्रारूप स्ट्रिंग है और 'kwargs' प्रारूप स्ट्रिंग में 'name_arg' से मेल खाने वाली कुंजियों वाला एक शब्दकोश है। – Edwin

उत्तर

154

आप अजगर 2.6 और अजगर 3.x में advanced string formatting, उपलब्ध का उपयोग कर सकते हैं:

s='arbit' 
string='%(key)s hello world %(key)s hello world %(key)s' % {'key': s,} 
+5

~ मेरी व्यक्तिगत वरीयता, kwargs शैली 'result =' {st} हैलो के लिए जाएं दुनिया {सेंट} हैलो वर्ल्ड {सेंट} 'प्रारूप (सेंट = आने वाली) ' – nehemiah

35
incoming = 'arbit' 
result = '%(s)s hello world %(s)s hello world %(s)s' % {'s': incoming} 

तुम एक समझ पाने के लिए इस का एक पढ़ने के लिए पसंद कर सकते हैं: String Formatting Operations

+1

अच्छा। इस बारे में भूल गया था। स्थानीय() भी करेंगे। – Goutham

+1

@ गौतम: यदि आप पाइथन संस्करण अद्यतित हैं तो एडम रोसेनफील्ड का जवाब बेहतर हो सकता है। – mhawke

+0

यह वास्तव में है। मैं अभी भी नए स्ट्रिंग स्वरूपण संचालन के लिए उपयोग कर रहा हूँ। – Goutham

13

आप स्वरूपण के प्रकार के शब्दकोश का उपयोग कर सकते हैं। यह काम करता है यदि आपका लक्ष्य अनावश्यकता को हटा रहा है।

s='foo' 
string='%s bar baz %s bar baz %s bar baz' % (3*(s,)) 
+1

इस डुप्लिकेट उत्तर प्रदान करने में बहुत कम बिंदु लगता है। यहां एक और है: '% (string_goes_here) s हैलो वर्ल्ड% (string_goes_here) हैलो वर्ल्ड% (string_goes_here) s'% {'string_goes_here': s,}। वास्तव में संभावनाओं की एक अनंत संख्या है। – mhawke

+3

mhawke: मैंने अपने ब्राउज़र को पृष्ठ को फिर से लोड करने से पहले संदेश पोस्ट किया था, इसलिए मुझे उस क्षण में पता नहीं था कि प्रश्न का उत्तर पहले ही दिया गया था। आपको कठोर आदमी होने की ज़रूरत नहीं है !! –

+2

@ लुकास: मुझे लगता है कि यह संभव है कि आपको अपने उत्तर में टाइप करने में 13 मिनट लगे :) और नीचे वोट के लिए धन्यवाद ... बहुत सराहना की। – mhawke

11

आप बेहतर से क्या मतलब है पर निर्भर करता है:

incoming = 'arbit' 
result = '{0} hello world {0} hello world {0}'.format(incoming) 
3
>>> s1 ='arbit' 
>>> s2 = 'hello world '.join([s]*3) 
>>> print s2 
arbit hello world arbit hello world arbit 
+0

मुझे लगता है कि प्रश्न में उदाहरण 'हैलो वर्ल्ड' के बारे में नहीं था, लेकिन कोई डुप्लीकेट वाला वास्तविक टेम्पलेट नहीं था। यही कारण है कि मैं downvoted। – Gra

0

Fstrings

आप Python 3.6+ उपयोग कर रहे हैं आप नए तथाकथित f-strings जो स्वरूपित स्ट्रिंग के लिए खड़ा है का उपयोग कर सकते हैं और यह एक की शुरुआत में चरित्र f जोड़कर किया जा सकता है इसे f-string के रूप में पहचानने के लिए स्ट्रिंग करें।

सभी के लिए स्रोत पांडा:

price = 123 
name = "Jerry" 
print(f"{name}!!, {price} is much, isn't {price} a lot? {name}!") 
>Jerry!!, 123 is much, isn't 123 a lot? Jerry! 

च-तार का उपयोग करने का मुख्य लाभ यह है कि वे अधिक पठनीय हैं, तेजी से हो सकता है, और बेहतर प्रदर्शन की पेशकश है पायथन डेटा विश्लेषण, डैनियल वाई चेन

मानक

कोई शक नहीं है कि नई f-strings अधिक पठनीय हैं, तो आप तार को पुन: मैप की जरूरत नहीं है के रूप में, ख जैसा कि उपर्युक्त उद्धरण में बताया गया है, क्या यह तेज़ है?

price = 123 
name = "Jerry" 

def new(): 
    x = f"{name}!!, {price} is much, isn't {price} a lot? {name}!" 


def old(): 
    x = "{1}!!, {0} is much, isn't {0} a lot? {1}!".format(price, name) 

import timeit 
print(timeit.timeit('new()', setup='from __main__ import new', number=10**7)) 
print(timeit.timeit('old()', setup='from __main__ import old', number=10**7)) 
> 3.8741058271543776 #new 
> 5.861819514350163 #old 

चल रहा है 10 मिलियन परीक्षण के ऐसा लगता है कि नए f-strings वास्तव में तेजी से मानचित्रण में हैं।

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