वास्तव में .join () विधि क्या करती है?


209

मैं पायथन के लिए बहुत नया हूं और पूरी तरह से उलझन में .join()हूं, जिसके द्वारा मैंने पढ़ा है कि तार को समाप्‍त करने के लिए पसंदीदा तरीका है।

मैंने कोशिश की:

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring().join(strid)

और कुछ ऐसा मिला:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5

यह इस तरह काम क्यों करता है? 595बस स्वचालित रूप से संलग्न नहीं होना चाहिए ?


1
मुझे लगता है कि जब आप कार्यक्रम चला रहे थे, तब आपने अपनी Yubikey को टैप किया था
Trenton

जवाबों:


303

अपने आउटपुट को ध्यान से देखें:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^                 ^                 ^

मैंने आपके मूल स्ट्रिंग के "5", "9", "5" पर प्रकाश डाला है। पायथन join()विधि एक स्ट्रिंग विधि है, और स्ट्रिंग के साथ जुड़ने के लिए चीजों की एक सूची लेती है । एक सरल उदाहरण समझाने में मदद कर सकता है:

>>> ",".join(["a", "b", "c"])
'a,b,c'

दी गई सूची के प्रत्येक तत्व के बीच "," डाला गया है। आपके मामले में, आपकी "सूची" स्ट्रिंग प्रतिनिधित्व "595" है, जिसे सूची ["5", "9", "5"] के रूप में माना जाता है।

ऐसा प्रतीत होता है कि आप +इसके बजाय देख रहे हैं :

print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid

1
ऐसा क्यों नहीं है: 5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5wlfgALGbXOahekxSs? पिछले तत्व के लिए संलग्न स्ट्रिंग के साथ?
मैट मैककार्मिक

10
इसका एक कारण ( docs.python.org/library/stdtypes.html#str.split ) joinका उलटा होना उपयोगी संपत्ति देता हैsplit
cobbal

4
यदि आप एक और सीमांकक चाहते हैं, तो अपनी सूची के अंत में एक खाली स्ट्रिंग डालें। ','.join(['a', 'b', 'c', ''])"a, b, c," देता है
tgray

9
ओपी शायद भ्रमित string.joinथे os.path.joinजिसके साथ वास्तव में पथ को समेटते हैं
जुआन कैम्पा

91

joinएक तर्क के रूप में एक चलने योग्य बात लेता है। आमतौर पर यह एक सूची है। आपके मामले में समस्या यह है कि एक स्ट्रिंग स्वयं ही चलने योग्य है, प्रत्येक वर्ण को बदले में दे रही है। आपका कोड इससे टूट जाता है:

"wlfgALGbXOahekxSs".join("595")

जो इस प्रकार कार्य करता है:

"wlfgALGbXOahekxSs".join(["5", "9", "5"])

और इसलिए अपनी स्ट्रिंग पैदा करता है:

"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"

पायरेबल के साथ स्ट्रेट इट्रैबल्स सबसे भ्रामक शुरुआत मुद्दों में से एक है।


8
यह इंगित करने के लिए upvote कि भ्रम की जड़ क्या हो सकती है: तार चलने योग्य होते हैं इसलिए वे वर्णों की सूची की तरह काम करते हैं।
डैनियल बेयर्ड

59

एक स्ट्रिंग संलग्न करने के लिए, बस इसे के साथ समेटना + संकेत के करें।

उदाहरण के लिए

>>> a = "Hello, "
>>> b = "world"
>>> str = a + b
>>> print str
Hello, world

joinएक विभाजक के साथ तार जोड़ता है। विभाजक वह है जो आप सही जगह पर रखते हैं join। उदाहरण के लिए

>>> "-".join([a,b])
'Hello, -world'

सम्मिलित हों एक पैरामीटर के रूप में तार की एक सूची लेता है।


5
इस तरह के प्रत्यक्ष और संक्षिप्त उत्तर की वकालत हमारे समुदाय को करनी चाहिए। @Dan
DehengYe

7

join () सभी लिस्ट तत्वों को समेटने के लिए है। केवल दो तारों को जोड़ने के लिए "+" अधिक समझ में आता है:

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring() + strid

4

दूसरों को क्या कह रहे हैं, इस पर थोड़ा और विस्तार करने के लिए, यदि आप केवल अपने दो तारों को जोड़ने के लिए जुड़ने का उपयोग करना चाहते हैं, तो आप ऐसा करेंगे:

strid = repr(595)
print ''.join([array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring(), strid])

2

इस बात की एक अच्छी व्याख्या है कि यहां+ बड़ी संख्या में तार लगाने के लिए इसका उपयोग करना क्यों महंगा है

प्लस ऑपरेटर दो पायथन स्ट्रिंग्स को समतल करने के लिए पूरी तरह से ठीक समाधान है । लेकिन अगर आप दो से अधिक तार जोड़ते हैं (n> 25), तो आप कुछ और सोचना चाहेंगे।

''.join([a, b, c]) ट्रिक एक प्रदर्शन अनुकूलन है।


0

इसे इनपुट के रूप में प्रदान करने पर,

li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
s = ";".join(li)
print(s)

पायथन ने इसे आउटपुट के रूप में लौटाया:

'server=mpilgrim;uid=sa;database=master;pwd=secret'

0
list = ["my", "name", "is", "kourosh"]   
" ".join(list)

यदि यह एक इनपुट है, तो JOIN विधि का उपयोग करके, हम शब्दों के बीच की दूरी जोड़ सकते हैं और सूची को स्ट्रिंग में भी बदल सकते हैं।

यह पायथन आउटपुट है

'my name is kourosh'

0

".join का प्रयोग किसी चर की सूची में स्ट्रिंग को कॉपी करने के लिए किया जा सकता है

>>> myList = list("Hello World")
>>> myString = "".join(myList)
>>> print(myList)
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> print(myString)
Hello World
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.