পাইথন মধ্যে Strings হয় অপরিবর্তনীয় (পরিবর্তন করা যাবে না)। এ কারণে, এর প্রভাবটি line.replace(...)পুরানোটি পরিবর্তনের পরিবর্তে কেবল একটি নতুন স্ট্রিং তৈরি করা। সেই ভেরিয়েবলটি নতুন মানটি গ্রহণ করার জন্য আপনাকে এটিকে পুনরায় ফিরিয়ে আনতে হবে (বরাদ্দ করতে হবে) lineসেই অক্ষরগুলি সরিয়ে দিয়ে।
এছাড়াও, আপনি যেভাবে এটি করছেন তা ধীরে ধীরে, তুলনামূলকভাবে হতে চলেছে। এটি অভিজ্ঞ পাইথোনেটরদের কাছেও কিছুটা বিভ্রান্ত হওয়ার সম্ভাবনা রয়েছে, যিনি দ্বিগুণ-নেস্টেড কাঠামো দেখবেন এবং এক মুহুর্তের জন্য ভাবেন যে আরও কিছু জটিল হচ্ছে।
পাইথন ২.6 এবং নতুন পাইথন ২.x সংস্করণ * থেকে শুরু করে আপনি এর পরিবর্তে ব্যবহার করতে পারেন str.translate(তবে পাইথন 3 পার্থক্যের জন্য পড়ুন):
line = line.translate(None, '!@#$')
বা নিয়মিত এক্সপ্রেশন প্রতিস্থাপন সঙ্গে re.sub
import re
line = re.sub('[!@#$]', '', line)
বন্ধনীগুলিতে আবদ্ধ অক্ষরগুলি একটি অক্ষর শ্রেণি গঠন করে । lineClass শ্রেণিতে থাকা কোনও অক্ষর দ্বিতীয় প্যারামিটারের সাথে প্রতিস্থাপিত হয় sub: একটি খালি স্ট্রিং।
পাইথন 3-এ স্ট্রিংগুলি ইউনিকোড। আপনাকে কিছুটা আলাদাভাবে অনুবাদ করতে হবে। কেভপি উত্তরগুলির একটিতে একটি মন্তব্যে এটি উল্লেখ করেছে এবং এর জন্য ডকুমেন্টেশনেstr.translate এটি উল্লেখ করা হয়েছে ।
translateইউনিকোড স্ট্রিংয়ের পদ্ধতিটি কল করার সময় , আমরা উপরে যে প্যারামিটারটি ব্যবহার করেছি তা পাস করতে পারবেন না। আপনি Noneপ্রথম প্যারামিটার হিসাবে পাস করতে পারবেন না । পরিবর্তে, আপনি একমাত্র পরামিতি হিসাবে অনুবাদ টেবিল (সাধারণত একটি অভিধান) পাস করেন। এই সারণীটি অক্ষরগুলির অর্ডিনাল মানগুলি (যেমন ordতাদেরকে আহ্বানের ফলাফল ) যে অক্ষরগুলির প্রতিস্থাপন করা উচিত, বা তাদের Noneজন্য মুছে ফেলা উচিত indicate " কার্যকরভাবে আমাদের কাছে -" নির্দেশ করে maps
সুতরাং ইউনিকোড স্ট্রিং সহ উপরের নৃত্যটি করতে আপনি এমন কিছু কল করবেন
translation_table = dict.fromkeys(map(ord, '!@#$'), None)
unicode_line = unicode_line.translate(translation_table)
এখানে dict.fromkeysএবং mapসংক্ষিপ্তভাবে একটি অভিধান সম্বলিত অভিধান তৈরি করতে ব্যবহৃত হয়
{ord('!'): None, ord('@'): None, ...}
এমনকি সহজ, অন্য উত্তর যেমনটি বলেছে তেমন জায়গায় অনুবাদ টেবিলটি তৈরি করুন:
unicode_line = unicode_line.translate({ord(c): None for c in '!@#$'})
অথবা এর সাথে একই অনুবাদ টেবিলটি তৈরি করুন str.maketrans:
unicode_line = unicode_line.translate(str.maketrans('', '', '!@#$'))
* পূর্ববর্তী পাইথনগুলির সাথে সামঞ্জস্যের জন্য আপনি "নাল" অনুবাদ সারণীটি এর স্থলে পাস করতে পারেন None:
import string
line = line.translate(string.maketrans('', ''), '!@#$')
এখানে string.maketransএকটি অনুবাদ টেবিল তৈরি করতে ব্যবহৃত হয় , যা কেবলমাত্র একটি স্ট্রিং যেখানে অরডিনাল মান 0 থেকে 255 পর্যন্ত অক্ষর থাকে।
filterফাংশন এবং একটি ল্যামডা এক্সপ্রেশন:filter(lambda ch: ch not in " ?.!/;:", line)। খুব সংক্ষিপ্ত এবং দক্ষ, আমি মনে করি। অবশ্যই, এটি একটি নতুন স্ট্রিং দেয় যা আপনাকে একটি নাম নির্ধারণ করতে হবে।