উত্তর:
join
এর মধ্যে ফাঁকা স্ট্রিংয়ের সাথে সমস্ত স্ট্রিংগুলিতে একসাথে যোগদানের জন্য খালি স্ট্রিংয়ের পদ্ধতিটি ব্যবহার করুন :
>>> a = ['a', 'b', 'c', 'd']
>>> ''.join(a)
'abcd'
' '.join(list)
উদ্ধৃতিগুলির মধ্যে একটি স্থান দিয়ে করুন
"".join(['a','b','c'])
মানে Join all elements of the array, separated by the string ""
। একইভাবে, " hi ".join(["jim", "bob", "joe"])
তৈরি করবে "jim hi bob hi joe"
।
এটি জাভাস্ক্রিপ্ট এবং রুবির মতো অনেক জনপ্রিয় ভাষায় কাজ করে কেন পাইথনে নয়?
>>> ['a', 'b', 'c'].join('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'join'
যথেষ্ট অদ্ভুত, পাইথনে join
পদ্ধতিটি str
ক্লাসে রয়েছে:
# this is the Python way
"".join(['a','b','c','d'])
জাভাস্ক্রিপ্ট বা অন্যান্য জনপ্রিয় স্ক্রিপ্ট ভাষার মতো কেন বস্তুটিতে join
কোনও পদ্ধতি নেই list
? পাইথন সম্প্রদায় কীভাবে চিন্তা করে তার এটি একটি উদাহরণ। যেহেতু যোগদানটি একটি স্ট্রিং ফিরিয়ে দিচ্ছে, এটি স্ট্রিং ক্লাসে স্থাপন করা উচিত, তালিকা শ্রেণিতে নয়, সুতরাং str.join(list)
পদ্ধতির অর্থ: তালিকার একটি নতুন স্ট্রিংয়ে str
বিভাজক হিসাবে ব্যবহার করে (এই ক্ষেত্রে str
একটি খালি স্ট্রিং)।
কিছুক্ষন পরে আমি এই ভাবে ভাবতে ভালোবাসি। পাইথন ডিজাইনে আমি প্রচুর জিনিস সম্পর্কে অভিযোগ করতে পারি, তবে এটির সংগতি সম্পর্কে নয়।
string.join()
বেশিরভাগ সংগ্রহের সাথে join()
অনেকগুলি গতিশীল ভাষায় একটি পদ্ধতি রয়েছে। পুনরাবৃত্তিযোগ্যদের সম্পর্কে, আমি অনুমান করি যে এই জাতীয় ভাষার ক্ষেত্রে এটি কোনও সমস্যা নয় কারণ join()
পদ্ধতিতে সংগ্রহের নির্মাতা এবং শৃঙ্খলে পুনরাবৃত্তকারীগুলিকে সংযুক্ত করা যতটা সহজ (এবং প্রগা )়) is
যদি আপনার পাইথন ইন্টারপ্রেটারটি পুরানো হয় (উদাহরণস্বরূপ, যা কিছু পুরানো লিনাক্স বিতরণে প্রচলিত) তবে আপনার join()
কোনও পুরানো স্ট্রিং অবজেক্টে পদ্ধতি হিসাবে উপলব্ধ নাও হতে পারে এবং তার পরিবর্তে আপনার স্ট্রিং মডিউলটি ব্যবহার করতে হবে। উদাহরণ:
a = ['a', 'b', 'c', 'd']
try:
b = ''.join(a)
except AttributeError:
import string
b = string.join(a, '')
স্ট্রিং b
হবে 'abcd'
।
এটি সবচেয়ে দ্রুততম উপায় হতে পারে:
>> from array import array
>> a = ['a','b','c','d']
>> array('B', map(ord,a)).tostring()
'abcd'
''.join(['a','b','c'])
map(ord,a)
অপ্রয়োজনীয়, তবে প্রয়োজনে যোগ দিন map(chr,a)
। এখানে আমার
''.join()
আরও অনেক বেশি পাঠযোগ্য।
হ্রাস ফাংশনও কাজ করে
import operator
h=['a','b','c','d']
reduce(operator.add, h)
'abcd'
(reduce + '' h)
বা (apply + h)
কাজ করবে। তবে আবার, পাইথনে, অ্যাড অপারেটর ঠিক 2 টি অপারেন্ড নেয়, তাই হ্রাস করার প্রয়োজন। অন্যথায়, আপনি এটি করতে পারেন operator.add(*h)
, যেহেতু apply
বর্ধিত কল সিনট্যাক্সের পক্ষে পাইথনে আনুষ্ঠানিকভাবে অবহিত করা হয়েছে (ওরফে en.wikedia.org/wiki/Variadic_function )
তালিকা সংখ্যার থাকে, আপনি ব্যবহার করতে পারেন map()
সঙ্গে join()
।
উদাহরণ:
>>> arr = [3, 30, 34, 5, 9]
>>> ''.join(map(str, arr))
3303459
''.join([str(i) for i in arr])
h = ['a','b','c','d','e','f']
g = ''
for f in h:
g = g + f
>>> g
'abcdef'
''.join(h)
আপনার এক-এক-এক সংযোজন পদ্ধতিটিকে ছাড়িয়ে যাবে।
str.join
সবচেয়ে প্রাকৃতিক উপায় ছাড়াও , সম্ভাবনা হ'ল io.StringIO
একসাথে writelines
সমস্ত উপাদান লিখতে এবং অপব্যবহার করা:
import io
a = ['a','b','c','d']
out = io.StringIO()
out.writelines(a)
print(out.getvalue())
কপি করে প্রিন্ট:
abcd
একটি জেনারেটর ফাংশন বা পুনরাবৃত্ত যা একটি tuple
বা একটি নয় এর সাথে এই পদ্ধতির ব্যবহার করার সময় list
, এটি অস্থায়ী তালিকা তৈরির সংরক্ষণ করেjoin
সঠিক আকার বরাদ্দ করতে পারে (এবং 1-অক্ষরের স্ট্রিংগুলির তালিকা খুব ব্যয়বহুল স্মৃতি অনুসারে )।
যদি আপনার স্মৃতিশক্তি কম থাকে এবং আপনার কাছে ইনপুট হিসাবে অলস-মূল্যায়িত বস্তু থাকে তবে এই পদ্ধতির সেরা সমাধান solution
আপনি এটির মতোও ব্যবহার করতে operator.concat()
পারেন:
>>> from operator import concat
>>> a = ['a', 'b', 'c', 'd']
>>> reduce(concat, a)
'abcd'
আপনি যদি পাইথন 3 ব্যবহার করেন তবে আপনাকে পুনরায় ত্যাগ করতে হবে:
>>> from functools import reduce
যেহেতু বিল্টিনটি reduce()
পাইথন 3 থেকে সরানো হয়েছে এবং এখন এটি বাস করে functools.reduce()
।