स्ट्रिंग को स्वरूपित करते समय एक ही मूल्य को कई बार सम्मिलित करना


111

मेरे पास इस फॉर्म का एक तार है

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

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



2
यह %स्ट्रिंग ऑपरेटर "पायथन 3.1 पर पदावनत किया जाएगा और बाद में कुछ समय में हटा दिया जाएगा" docs.python.org/release/3.0.1/whatsnew/ ... अब मुझे आश्चर्य है कि संस्करण संगतता और सुरक्षा दोनों के लिए सबसे अधिक सलाह देने का तरीका क्या है।
क्रेगॉक्स

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

4
@Cawas हाँ, सिवाय एडम टपल अंकन, जहां इस्तेमाल किया {0}, {1}, {2}और इतने अनुरूप पर टपल सूचकांक करने के लिए 0, 1और 2, क्रमशः। वैकल्पिक रूप से, आर्ग्स (जैसे {named_arg}) को नाम देना और प्रारूप विधि में प्रत्येक को सेट करना संभव है , जैसे:'Hi {fname} {lname}!'.format(fname='John', lname='Doe')
एडविन

2
@bignose आपने दोनों सवालों को एक दूसरे के डुप्लिकेट के रूप में चिह्नित किया है जैसे कि google.com/…
abhi

जवाबों:


203

आप उन्नत स्ट्रिंग प्रारूपण का उपयोग कर सकते हैं , जो पायथन 2.6 और पायथन 3.x में उपलब्ध है:

incoming = 'arbit'
result = '{0} hello world {0} hello world {0}'.format(incoming)

11
~ मेरी व्यक्तिगत पसंद, kwargs शैली के लिए जानाresult = '{st} hello world {st} hello world {st}'.format(st=incoming)
nehem

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

एक समझ पाने के लिए आप इसे पढ़ना पसंद कर सकते हैं: स्ट्रिंग स्वरूपण संचालन


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

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

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

3
इससे भी बेहतर, आप आधार स्ट्रिंग को गुणा कर सकते हैं: '% (s) का हैलो वर्ल्ड' * 3% {'s': 'asdad'}
dalloliogm

15

आप स्वरूपण के शब्दकोश प्रकार का उपयोग कर सकते हैं:

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

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

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

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

13

आप बेहतर से क्या मतलब है पर निर्भर करता है। यह काम करता है अगर आपका लक्ष्य अतिरेक को हटा रहा है।

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

3
>>> s1 ='arbit'
>>> s2 = 'hello world '.join( [s]*3 )
>>> print s2
arbit hello world arbit hello world arbit

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

1

Fstrings

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

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अधिक पठनीय हैं, जैसा कि आपको स्ट्रिंग्स को फिर से तैयार करने की आवश्यकता नहीं है, लेकिन क्या यह अधिक तेज़ है, जैसा कि aformentioned उद्धरण में कहा गया है?

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मानचित्रण में वास्तव में तेज़ हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.