একটি স্ট্রিংয়ে অক্ষরের উদাহরণগুলি প্রতিস্থাপন করা হচ্ছে


119

এই সহজ কোডটি যা কেবলমাত্র কোলন দ্বারা অর্ধিকলনগুলি (আই-নির্দিষ্ট পোস্টগুলিতে) প্রতিস্থাপনের চেষ্টা করে তা কার্যকর হয় না:

for i in range(0,len(line)):
     if (line[i]==";" and i in rightindexarray):
         line[i]=":"

এটি ত্রুটি দেয়

line[i]=":"
TypeError: 'str' object does not support item assignment

কোলন দ্বারা সেমিকোলনগুলি প্রতিস্থাপন করতে আমি কীভাবে এটি ঘিরে কাজ করতে পারি? প্রতিস্থাপনটি ব্যবহার করা কাজ করে না কারণ এই ফাংশনটি কোনও সূচক নেয় না there এমন কিছু সেমিকোলন থাকতে পারে যা আমি প্রতিস্থাপন করতে চাই না।

উদাহরণ

স্ট্রিংটিতে আমার কাছে প্রচুর সেমিকোলন থাকতে পারে, যেমন "হেই ডের!; হ্যালো ওখানে!;!"

আমি জানি আমি কোনটি প্রতিস্থাপন করতে চাই (আমার স্ট্রিংটিতে তাদের সূচি রয়েছে)। প্রতিস্থাপন ব্যবহার করা কাজ করে না কারণ আমি এটির সাথে কোনও সূচক ব্যবহার করতে পারছি না।


1
আপনি str.replace()বিআইএফ জানেন ?
লার্সভেগাস

2
হ্যাঁ, আমি যেমন প্রশ্নে ব্যাখ্যা করেছি। এটি আমার জন্য কেন কার্যকর হয় না তাও আমি ব্যাখ্যা করেছিলাম।
আনফুন বিড়াল

এর str.find() পরিবর্তে সেমিকোলনের অবস্থান সন্ধান করতে ব্যবহার করুন , তারপরে স্ট্রিংটি বের করার জন্য স্লাইসিং ব্যবহার করুন।
লার্সভেগাস

1
তারপরে বৈধ প্রতিস্থাপনের ক্ষেত্রে আপনার আরও সুনির্দিষ্ট হওয়া দরকার; যদি আপনার অ-কার্যকারী কোডটি পরিবর্তনীয় হয় তবে স্ট্রিংয়ের সমস্ত সেমিকোলনগুলিকে প্রতিস্থাপন করবে।
মার্টিজন পিটারস

1
@ দ্য ইউনফুনগ্যাট: আপনি সূচকগুলি প্রথম স্থানে কীভাবে পাচ্ছেন? পুরো জিনিসটির আরও ভাল সমাধান হতে পারে (উদাহরণস্বরূপ রেজিজেসস)
ন্যানোনিও

উত্তর:


206

পাইথনের স্ট্রিংগুলি অপরিবর্তনীয়, তাই আপনি এগুলিকে একটি তালিকা হিসাবে বিবেচনা করতে এবং সূচকগুলিতে নির্ধারণ করতে পারবেন না।

.replace()পরিবর্তে ব্যবহার করুন:

line = line.replace(';', ':')

আপনার যদি কেবলমাত্র কয়েকটি নির্দিষ্ট সেমিকোলন প্রতিস্থাপন করতে হয় তবে আপনার আরও নির্দিষ্ট হওয়া দরকার। আপনি স্ট্রিংয়ের অংশটি প্রতিস্থাপনের জন্য পৃথক করে কাটা ব্যবহার করতে পারেন:

line = line[:10].replace(';', ':') + line[10:]

এটি স্ট্রিংয়ের প্রথম 10 টি অক্ষরে সমস্ত আধা-কলোন প্রতিস্থাপন করবে।


এটি কি ইউনিকোড চরিত্রগুলির সাথে কাজ করে? এটি আমার পক্ষে কাজ করবে বলে মনে হয় না।
স্টিভেন 2163712

@ স্টিভেন2163712: সমস্ত পাঠ্যটি ইউনিকোড, সুতরাং হ্যাঁ, এটি সমস্ত চরিত্রের সাথে দুর্দান্ত কাজ করে। একটি দৃ concrete় উদাহরণ ব্যতীত আমি আপনাকে আপনার নির্দিষ্ট সমস্যা সমাধান করতে সহায়তা করতে পারি না।
মার্টিজন পিটারস

62

আপনি যদি না চান তবে কোনও প্রদত্ত সূচকে স্বতন্ত্র চরের সাথে যে কোনও চরটি প্রতিস্থাপন করতে নীচের কাজটি করতে পারেন .replace()

word = 'python'
index = 4
char = 'i'

word = word[:index] + char + word[index + 1:]
print word

o/p: pythin

7
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, সরাসরি প্রশ্নের উত্তর দেয়। এটি এ পর্যন্ত পাওয়া সবচেয়ে সহজ পদ্ধতি method
ফ্লার বিড়াল

24

স্ট্রিংটিকে তালিকায় পরিণত করুন; তারপরে আপনি স্বতন্ত্রভাবে অক্ষর পরিবর্তন করতে পারেন। তারপরে আপনি এটিকে আবার এক সাথে রাখতে পারেন .join:

s = 'a;b;c;d'
slist = list(s)
for i, c in enumerate(slist):
    if slist[i] == ';' and 0 <= i <= 3: # only replaces semicolons in the first part of the text
        slist[i] = ':'
s = ''.join(slist)
print s # prints a:b:c;d

6

আপনি যদি একটি একক সেমিকোলন প্রতিস্থাপন করতে চান:

for i in range(0,len(line)):
 if (line[i]==";"):
     line = line[:i] + ":" + line[i+1:]

যদিও এটি পরীক্ষা করেছে।


3
এটি (+1) কাজ করবে তবে বেশ অদক্ষ, কারণ আপনি প্রতিবার 'একটি' এর মুখোমুখি হয়ে একটি নতুন স্ট্রিং তৈরি করছেন;
ইন্সপেক্টর

@ ইন্সপেক্টর জি 4ডেজ, আপনি ঠিক বলেছেন, এটি দ্রুত এবং নোংরা - একমাত্র সময় - সমাধান solution
ভিক

আসলে, @ ইন্সপেক্টর জি 4ডেজ, গৃহীত উত্তরগুলি কি একই সমস্যায় ভুগছে না?
ভিক

2
line.replace(src,dst)না. line[:10].replace(src,dst) + line[10:]না, কিন্তু খুব কম তীব্রতা। ধরুন line = ';'*12। আপনার সমাধানটি 12 বার একটি নতুন স্ট্রিং তৈরি করবে। গৃহীত সমাধানটি একবার এটি করবে।
ইন্সপেক্টর

3

এটিতে আরও কিছুটা সাধারণ কেস কভার করা উচিত তবে আপনার উদ্দেশ্যটির জন্য আপনি এটি কাস্টমাইজ করতে সক্ষম হবেন

def selectiveReplace(myStr):
    answer = []
    for index,char in enumerate(myStr):
        if char == ';':
            if index%2 == 1: # replace ';' in even indices with ":"
                answer.append(":")
            else:
                answer.append("!") # replace ';' in odd indices with "!"
        else:
            answer.append(char)
    return ''.join(answer)

আশাকরি এটা সাহায্য করবে


3

আপনি কেবল স্ট্রিংয়ের একটি অক্ষরের মান নির্ধারণ করতে পারবেন না। একটি নির্দিষ্ট অক্ষরের মান প্রতিস্থাপন করতে এই পদ্ধতিটি ব্যবহার করুন:

name = "India"
result=name .replace("d",'*')

আউটপুট: ইন * আইএ

এছাড়াও, আপনি যদি প্রথম অক্ষর ব্যতীত প্রথম অক্ষরের সমস্ত উপস্থিতির জন্য বলুন * প্রতিস্থাপন করতে চান। স্ট্রিং = বেডল আউটপুট = বা ** লে

কোড:

name = "babble"
front= name [0:1]
fromSecondCharacter = name [1:]
back=fromSecondCharacter.replace(front,'*')
return front+back

1

আপনি যদি ভেরিয়েবল 'এন' এ নির্দিষ্ট করে একটি সূচক মানের দ্বারা প্রতিস্থাপন করছেন তবে নীচে চেষ্টা করুন:

def missing_char(str, n):
 str=str.replace(str[n],":")
 return str

1
এই সমাধানটির সাথে সমস্যাটি হ'ল এটি চরিত্রের সমস্ত ঘটনাকে এন পজিশনে প্রতিস্থাপন করবে এবং
প্রশ্নকারী

একদম ঠিকঠাক সমাধান!
এরহার্ড ডিনহব্ল

1

এটি সম্পর্কে:

sentence = 'After 1500 years of that thinking surpressed'

sentence = sentence.lower()

def removeLetter(text,char):

    result = ''
    for c in text:
        if c != char:
            result += c
    return text.replace(char,'*')
text = removeLetter(sentence,'a')

1

পৃথক তালিকা তৈরি না করে স্ট্রিংয়ে কার্যকরভাবে .replace () পদ্ধতিটি ব্যবহার করতে উদাহরণস্বরূপ কয়েকটি সাদা স্থানের সাথে স্ট্রিং যুক্ত তালিকার ব্যবহারকারীর নাম একবার দেখুন, আমরা প্রতিটি ব্যবহারকারীর নামটির স্ট্রিংয়ের একটি আন্ডারস্কোর দিয়ে সাদা স্থানটি প্রতিস্থাপন করতে চাই।

usernames = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]

প্রতিটি ব্যবহারকারীর সাদা স্পেসগুলি প্রতিস্থাপন করতে পাইথনে রেঞ্জ ফাংশনটি বিবেচনা করুন consider

for i in range(len(usernames)):
    usernames[i] = usernames[i].lower().replace(" ", "_")

print(usernames)

0

একটি নির্দিষ্ট সূচকে একটি অক্ষর প্রতিস্থাপন করতে, ফাংশনটি নিম্নরূপ:

def replace_char(s , n , c):
    n-=1
    s = s[0:n] + s[n:n+1].replace(s[n] , c) + s[n+1:]
    return s

যেখানে গুলি একটি স্ট্রিং, এন সূচক এবং সি একটি অক্ষর।


0

আমি এই পদ্ধতিটি অক্ষরগুলি প্রতিস্থাপন করতে বা একটি নির্দিষ্ট সময়ে স্ট্রিং প্রতিস্থাপন করতে লিখেছিলাম। উদাহরণগুলি 0 থেকে শুরু হয় (আপনি যদি alচ্ছিক ইনস্ট্যান্ট যুক্তিটি 1 এ এবং টেস্ট_ইনস্ট্যান্স ভেরিয়েবল 1 এ পরিবর্তন করেন তবে এটি সহজেই 1 এ পরিবর্তিত হতে পারে।

def replace_instance(some_word, str_to_replace, new_str='', inst=0):
    return_word = ''
    char_index, test_instance = 0, 0
    while char_index < len(some_word):
        test_str = some_word[char_index: char_index + len(str_to_replace)]
        if test_str == str_to_replace:
            if test_instance == inst:
                return_word = some_word[:char_index] + new_str + some_word[char_index + len(str_to_replace):]
                break
            else:
                test_instance += 1
        char_index += 1
    return return_word

0

তুমি এটি করতে পারো:

string = "this; is a; sample; ; python code;!;" #your desire string
result = ""
for i in range(len(string)):
    s = string[i]
    if (s == ";" and i in [4, 18, 20]): #insert your desire list
        s = ":"
    result = result + s
print(result)

0

নামগুলি = ["জোয়ে ট্রিবিয়েনী", "মনিকা জেলার", "চ্যান্ডলার বিং", "ফোবি বাফে"]

ব্যবহারকারীর নাম = []

for i in names:
    if " " in i:
        i = i.replace(" ", "_")
    print(i)

ও, পি জো_ট্রিবিয়ান মনিকা_জেলার চ্যান্ডলার_বিং ফোবি_বুফে uff


1
ধন্যবাদ, মুহাম্মদ আমি একটি শিক্ষানবিস আমি যথাসাধ্য চেষ্টা করব।
Kasem007
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.