উত্তর:
স্ট্রিংগুলি সংশোধন করবেন না।
তালিকা হিসাবে তাদের সাথে কাজ করুন; এগুলি কেবল যখন প্রয়োজন তখন স্ট্রিংগুলিতে পরিণত করুন।
>>> s = list("Hello zorld")
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'z', 'o', 'r', 'l', 'd']
>>> s[6] = 'W'
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> "".join(s)
'Hello World'
পাইথনের স্ট্রিং অপরিবর্তনীয় (যেমন সেগুলি সংশোধন করা যায় না)। এর অনেক কারণ রয়েছে। আপনার কোনও পছন্দ না হওয়া পর্যন্ত তালিকাগুলি ব্যবহার করুন, কেবল তারপরে সেগুলিতে স্ট্রিংয়ে পরিণত করুন।
MID
টুকরো টুকরো করার মতো জিনিসের দরকার নেই :s[:index] + c + s[index+1:]
তিনটি উপায় আছে। গতি সন্ধানীদের জন্য আমি 'পদ্ধতি 2' এর সুপারিশ করছি
পদ্ধতি 1
text = 'abcdefg'
new = list(text)
new[6] = 'W'
''.join(new)
'পদ্ধতি 2' এর তুলনায় যা বেশ ধীর
timeit.timeit("text = 'abcdefg'; s = list(text); s[6] = 'W'; ''.join(s)", number=1000000)
1.0411581993103027
পদ্ধতি 2 (দ্রুত পদ্ধতি)
text = 'abcdefg'
text = text[:1] + 'Z' + text[2:]
যা অনেক দ্রুত:
timeit.timeit("text = 'abcdefg'; text = text[:1] + 'Z' + text[2:]", number=1000000)
0.34651994705200195
পদ্ধতি 3:
বাইট অ্যারে:
timeit.timeit("text = 'abcdefg'; s = bytearray(text); s[1] = 'Z'; str(s)", number=1000000)
1.0387420654296875
timeit.timeit("text = 'abcdefg'; s = bytearray(text); s[1] = 'Z'; str(s)", number=1000000)
চেয়ে দ্বিগুণ।
new = text[:1] + 'Z' + text[2:]
পাইথন স্ট্রিংগুলি পরিবর্তনযোগ্য নয়, আপনি একটি অনুলিপি তৈরি করে এগুলি পরিবর্তন করেন।
আপনি যা চান তা করার সহজতম উপায় সম্ভবত:
text = "Z" + text[1:]
text[1:]
রিটার্ন স্ট্রিং text
শেষ অবস্থানে 1 থেকে, অবস্থান 0 থেকে গণনা তাই '1' দ্বিতীয় চরিত্র।
সম্পাদনা: স্ট্রিংয়ের যে কোনও অংশের জন্য আপনি একই স্ট্রিং স্লাইসিং কৌশলটি ব্যবহার করতে পারেন
text = text[:1] + "Z" + text[2:]
বা যদি চিঠিটি কেবল একবার উপস্থিত হয় আপনি নীচে প্রস্তাবিত কৌশলটি সন্ধান এবং প্রতিস্থাপন করতে পারেন
পাইথন ২.6 এবং অজগর 3 দিয়ে শুরু করে আপনি বাইটায়ারগুলি ব্যবহার করতে পারেন যা পরিবর্তনীয় (স্ট্রিংয়ের বিপরীতে উপাদান অনুসারে পরিবর্তিত হতে পারে):
s = "abcdefg"
b_s = bytearray(s)
b_s[1] = "Z"
s = str(b_s)
print s
aZcdefg
সম্পাদনা: এস আর এস পরিবর্তন করা হয়েছে
সম্পাদনা 2: দ্বি-বিট অ্যালকেমিস্ট মন্তব্যে উল্লিখিত হিসাবে, এই কোডটি ইউনিকোড দিয়ে কাজ করে না।
bytearray(s)
, না bytearray(str)
। অন্য জন্য, এই হবে উত্পাদন: TypeError: string argument without an encoding
। আপনি যদি কোনও এনকোডিং নির্দিষ্ট করেন তবে আপনি পাবেন TypeError: an integer is required
। পাইথন 3 বা পাইথন 2 এর ইউনিকোডের সাথে। আপনি যদি পাইথন 2 এ এটি সংশোধন করেন (সংশোধন করা দ্বিতীয় লাইনের সাহায্যে), এটি অ-এসসিআইআই অক্ষরের জন্য কাজ করবে না কারণ সেগুলি কেবল একটি বাইট নাও হতে পারে। এটি দিয়ে চেষ্টা করুন s = 'Héllo'
এবং আপনি পাবেন 'He\xa9llo'
।
s = u'abcdefg'
।
অন্যান্য লোকেরা যেমন বলেছে, সাধারণত পাইথনের স্ট্রিংগুলি অনির্বচনীয় বলে মনে করা হয়।
তবে, আপনি যদি পাইথন ব্যবহার করেন, পাইথন.আর. তে প্রয়োগকরণ, মেমরির স্ট্রিং কাঠামো পরিবর্তন করতে সিটিপিস ব্যবহার করা সম্ভব।
এখানে একটি উদাহরণ যেখানে আমি কৌশলটি কোনও স্ট্রিং সাফ করার জন্য ব্যবহার করি।
পাইথনে সংবেদনশীল হিসাবে ডেটা চিহ্নিত করুন
আমি সম্পূর্ণতার জন্য এটি উল্লেখ করেছি, এবং এটি হ্যাকিশ হওয়ার কারণে এটিই আপনার শেষ অবলম্বন হওয়া উচিত।
str
এটি আপনার পক্ষে সঠিক ধরণের নয়। শুধু এটি ব্যবহার করবেন না। bytearray
পরিবর্তে কিছু ব্যবহার করুন । (আরও ভাল, এটি এমন কোনও মোড়কে মুছুন যা আপনাকে এটি অস্বচ্ছ ডেটা হিসাবে কম-বেশি চিকিত্সা করতে দেয় যাতে দুর্ঘটনা থেকে রক্ষা পেতে আপনি সত্যই এটি থেকে কোনও পুনরুদ্ধার করতে পারবেন নাstr
that এর জন্য কোনও গ্রন্থাগার থাকতে পারে No কোনও ধারণা নেই))
এই কোডটি আমার নয়। আমি যে সাইট ফর্মটি নিয়েছিলাম তা মনে করতে পারি না। আকর্ষণীয়ভাবে, আপনি এটি ব্যবহার করতে পারেন একটি চরিত্র বা আরও একাধিক অক্ষরের সাথে প্রতিস্থাপন করতে। যদিও এই উত্তরটি খুব দেরিতে হয়েছে, আমার মতো নবীনদের (যে কোনও সময়) এটি কার্যকর হতে পারে।
mytext = 'Hello Zorld'
mytext = mytext.replace('Z', 'W')
print mytext,
l
। mytext = mytext.replace('l', 'W')
->HeWWo Zorld
mytext = mytext.replace('l', 'W',1)
। দস্তাবেজের লিঙ্ক
আসলে, স্ট্রিং সহ, আপনি এর মতো কিছু করতে পারেন:
oldStr = 'Hello World!'
newStr = ''
for i in oldStr:
if 'a' < i < 'z':
newStr += chr(ord(i)-32)
else:
newStr += i
print(newStr)
'HELLO WORLD!'
মূলত, আমি একটি নতুন স্ট্রিংয়ের সাথে "+" স্ট্রিংগুলি "যুক্ত করছি"।
আমি একটি স্ট্রিংয়ে একটি চরিত্র পরিবর্তন করার অন্য উপায় যুক্ত করতে চাই।
>>> text = '~~~~~~~~~~~'
>>> text = text[:1] + (text[1:].replace(text[0], '+', 1))
'~+~~~~~~~~~'
স্ট্রিংটিকে তালিকায় পরিণত করা এবং ith মান প্রতিস্থাপনের সাথে আবার যুক্ত হওয়ার সাথে তুলনা করা কত দ্রুত হয় ?.
তালিকা পদ্ধতির
>>> timeit.timeit("text = '~~~~~~~~~~~'; s = list(text); s[1] = '+'; ''.join(s)", number=1000000)
0.8268570480013295
আমার সমাধান
>>> timeit.timeit("text = '~~~~~~~~~~~'; text=text[:1] + (text[1:].replace(text[0], '+', 1))", number=1000000)
0.588400217000526