আমি কীভাবে অজগর স্ট্রিংয়ের সমস্ত স্পেস ফাঁকা করব? উদাহরণস্বরূপ, আমি চাই একটি স্ট্রিং strip my spaces
রূপান্তরিত হোক stripmyspaces
, তবে আমি এটিটি সম্পাদন করতে পারব না strip()
:
>>> 'strip my spaces'.strip()
'strip my spaces'
আমি কীভাবে অজগর স্ট্রিংয়ের সমস্ত স্পেস ফাঁকা করব? উদাহরণস্বরূপ, আমি চাই একটি স্ট্রিং strip my spaces
রূপান্তরিত হোক stripmyspaces
, তবে আমি এটিটি সম্পাদন করতে পারব না strip()
:
>>> 'strip my spaces'.strip()
'strip my spaces'
উত্তর:
কোনও sep প্যারামিটার ছাড়াই str.split এর আচরণের সুবিধা গ্রহণ করা:
>>> s = " \t foo \n bar "
>>> "".join(s.split())
'foobar'
আপনি যদি কেবল সমস্ত সাদা জায়গার পরিবর্তে স্পেসগুলি সরাতে চান:
>>> s.replace(" ", "")
'\tfoo\nbar'
যদিও দক্ষতা প্রাথমিক লক্ষ্য নয় clear স্পষ্ট কোড লেখা — এখানে প্রাথমিক কিছু সময় রয়েছে:
$ python -m timeit '"".join(" \t foo \n bar ".split())'
1000000 loops, best of 3: 1.38 usec per loop
$ python -m timeit -s 'import re' 're.sub(r"\s+", "", " \t foo \n bar ")'
100000 loops, best of 3: 15.6 usec per loop
রেজেক্স ক্যাশেড হয়েছে তা নোট করুন, সুতরাং এটি আপনি কল্পনা করুন তত ধীর হয় না। আগে থেকে এটি সংকলন কিছুকে সহায়তা করে তবে আপনি বাস্তবে এটিকে বহুবার কল করলেই বাস্তবে তা বিবেচনা করতে পারে :
$ python -m timeit -s 'import re; e = re.compile(r"\s+")' 'e.sub("", " \t foo \n bar ")'
100000 loops, best of 3: 7.76 usec per loop
যদিও রি.স্যাব 11.3x ধীর গতিতে রয়েছে, তবে মনে রাখবেন যে আপনার বাধা অবশ্যই অন্য কোথাও রয়েছে। বেশিরভাগ প্রোগ্রামগুলিতে এই 3 টি পছন্দের মধ্যে পার্থক্য লক্ষ্য করা যায় না।
\s+
প্রতিস্থাপনের চেয়ে ধীর । আমি পুনরায় সাথে থাকি।
s.translate
কোনও সুযোগে পদ্ধতিটি ব্যবহার করে দেখেছেন? এটি সম্ভবত এই পৃষ্ঠায় প্রদর্শিত সমস্ত পদ্ধতিকে প্রহার করে।
None
- যদিও আশ্চর্যের বিষয় এটি এটিকে ধীর করে তোলে ...
myString.translate(None, " \t\r\n\v")
। এটি কেবলমাত্র রজারের দ্রুততম (বিভক্ত এবং যোগদান) কৌশল হিসাবে 83% সময় নেয়। নিশ্চিত নয় যে এটি সমস্ত সাদা স্থানের অক্ষরগুলিকে বিভক্ত করে তোলে তবে এটি সম্ভবত বেশিরভাগ এএসসিআইআই অ্যাপ্লিকেশনের পক্ষে যথেষ্ট।
>>> import re
>>> re.sub(r'\s+', '', 'strip my spaces')
'stripmyspaces'
এমন কোনও সাদা বর্ণমালা অক্ষরও পরিচালনা করে যা আপনি ভাবছেন না (বিশ্বাস করুন, প্রচুর পরিমাণে আছে)।
অন্যথা,
"strip my spaces".translate( None, string.whitespace )
এবং এখানে পাইথন 3 সংস্করণ রয়েছে:
"strip my spaces".translate(str.maketrans('', '', string.whitespace))
NameError: name 'string' is not defined
।
import string
string1=" This is Test String to strip leading space"
print string1
print string1.lstrip()
string2="This is Test String to strip trailing space "
print string2
print string2.rstrip()
string3=" This is Test String to strip leading and trailing space "
print string3
print string3.strip()
string4=" This is Test String to test all the spaces "
print string4
print string4.replace(" ", "")
এর সাথে একটি রেজেক্স চেষ্টা করুন re.sub
। আপনি সমস্ত সাদা স্থান অনুসন্ধান করতে পারেন এবং খালি স্ট্রিংয়ের সাথে প্রতিস্থাপন করতে পারেন।
\s
আপনার নিদর্শনগুলিতে সাদা জায়গার অক্ষরের সাথে মিল থাকবে - এবং কেবল একটি স্থান নয় (ট্যাবগুলি, নিউলাইনগুলি, ইত্যাদি), ম্যানুয়ালটিতে আপনি এটি সম্পর্কে আরও পড়তে পারেন ।
import re
re.sub(' ','','strip my spaces')
রজার প্যাট দ্বারা উল্লিখিত কোডটি আমার পক্ষে কাজ করেছে:
s = " \t foo \n bar "
"".join(s.split())
'foobar'
আমি নিম্নলিখিত কোডটি চালানোর জন্য জুপিটার নোটবুকটি ব্যবহার করছি:
i=0
ProductList=[]
while i < len(new_list):
temp='' # new_list[i]=temp=' Plain Utthapam '
#temp=new_list[i].strip() #if we want o/p as: 'Plain Utthapam'
temp="".join(new_list[i].split()) #o/p: 'PlainUtthapam'
temp=temp.upper() #o/p:'PLAINUTTHAPAM'
ProductList.append(temp)
i=i+2
একটি তালিকা ফিল্টার করার স্ট্যান্ডার্ড কৌশলগুলি প্রয়োগ হয়, যদিও তারা পদ্ধতি split/join
বা translate
পদ্ধতির মতো দক্ষ নয় ।
আমাদের হোয়াইটস্পেসের একটি সেট দরকার:
>>> import string
>>> ws = set(string.whitespace)
filter
builtin:
>>> "".join(filter(lambda c: c not in ws, "strip my spaces"))
'stripmyspaces'
একটি তালিকা বোধগম্যতা (হ্যাঁ, বন্ধনী ব্যবহার করুন: নীচে বেনমার্ক দেখুন):
>>> import string
>>> "".join([c for c in "strip my spaces" if c not in ws])
'stripmyspaces'
একটি ভাঁজ:
>>> import functools
>>> "".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))
'stripmyspaces'
মাপকাঠি:
>>> from timeit import timeit
>>> timeit('"".join("strip my spaces".split())')
0.17734256500003198
>>> timeit('"strip my spaces".translate(ws_dict)', 'import string; ws_dict = {ord(ws):None for ws in string.whitespace}')
0.457635745999994
>>> timeit('re.sub(r"\s+", "", "strip my spaces")', 'import re')
1.017787621000025
>>> SETUP = 'import string, operator, functools, itertools; ws = set(string.whitespace)'
>>> timeit('"".join([c for c in "strip my spaces" if c not in ws])', SETUP)
0.6484303600000203
>>> timeit('"".join(c for c in "strip my spaces" if c not in ws)', SETUP)
0.950212219999969
>>> timeit('"".join(filter(lambda c: c not in ws, "strip my spaces"))', SETUP)
1.3164566040000523
>>> timeit('"".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))', SETUP)
1.6947649049999995
টি এল / ডিআর
পাইথন ৩.6 ব্যবহার করে এই দ্রবণটি পরীক্ষা করা হয়েছিল
পাইথন 3 এর একটি স্ট্রিং থেকে সমস্ত স্পেস ফাঁকা করতে আপনি নিম্নলিখিত ফাংশনটি ব্যবহার করতে পারেন:
def remove_spaces(in_string: str):
return in_string.translate(str.maketrans({' ': ''})
যে কোনও শ্বেতস্থান অক্ষর ('\ t \ n \ r \ x0b \ x0c') মুছে ফেলার জন্য আপনি নিম্নলিখিত ফাংশনটি ব্যবহার করতে পারেন:
import string
def remove_whitespace(in_string: str):
return in_string.translate(str.maketrans(dict.fromkeys(string.whitespace)))
ব্যাখ্যা
পাইথনের str.translate
পদ্ধতিটি স্ট্র-এর একটি অন্তর্নির্মিত শ্রেণির পদ্ধতি, এটি একটি টেবিল নেয় এবং পাশ করা অনুবাদ টেবিলের সাহায্যে প্রতিটি চরিত্রের ম্যাপযুক্ত স্ট্রিংয়ের একটি অনুলিপি দেয়। Str.translate জন্য সম্পূর্ণ ডকুমেন্টেশন
অনুবাদ টেবিল তৈরি করতে str.maketrans
ব্যবহৃত হয়। এই পদ্ধতিটি আরেকটি অন্তর্নির্মিত শ্রেণির পদ্ধতি str
। এখানে আমরা এটি কেবলমাত্র একটি প্যারামিটার দিয়ে ব্যবহার করি, এক্ষেত্রে একটি অভিধান, যেখানে কীগুলি অক্ষরগুলি প্রতিস্থাপনের জন্য মানগুলির সাথে মানগুলি প্রতিস্থাপন করা হয়। এটি ব্যবহারের জন্য একটি অনুবাদ টেবিল ফেরত দেয় str.translate
। Str.maketrans জন্য সম্পূর্ণ ডকুমেন্টেশন
string
পাইথন মধ্যে মডিউল কিছু সাধারণ স্ট্রিং অপারেশন এবং ধ্রুবক রয়েছে। string.whitespace
একটি ধ্রুবক যা হোয়াইটস্পেস হিসাবে বিবেচিত সমস্ত ASCII অক্ষর সমন্বিত একটি স্ট্রিং দেয়। এর মধ্যে অক্ষরের স্থান, ট্যাব, লাইনফিড, রিটার্ন, ফর্মফিড এবং উল্লম্ব ট্যাব অন্তর্ভুক্ত রয়েছে। স্ট্রিংয়ের জন্য সম্পূর্ণ ডকুমেন্টেশন
দ্বিতীয় ফাংশনটিতে dict.fromkeys
একটি অভিধান তৈরি করতে ব্যবহৃত হয় যেখানে কীগুলি স্ট্রিংয়ের অক্ষরের string.whitespace
সাথে মান সহ প্রত্যেকে ফিরিয়ে দেয় None
। ডিক.ফ্রমকিগুলির জন্য সম্পূর্ণ ডকুমেন্টেশন
যদি সর্বোত্তম পারফরম্যান্সের প্রয়োজন না হয় এবং আপনি কেবল মৃত সাধারণ কিছু চান, আপনি স্ট্রিং ক্লাসের অন্তর্নির্মিত "ইস্পেস" পদ্ধতিটি ব্যবহার করে প্রতিটি চরিত্র পরীক্ষা করার জন্য একটি মৌলিক ফাংশনটি সংজ্ঞায়িত করতে পারেন:
def remove_space(input_string):
no_white_space = ''
for c in input_string:
if not c.isspace():
no_white_space += c
return no_white_space
এইভাবে no_white_space
স্ট্রিংটি তৈরি করা আদর্শ পারফরম্যান্স পাবে না, তবে সমাধানটি বোঝা সহজ।
>>> remove_space('strip my spaces')
'stripmyspaces'
যদি আপনি কোনও ফাংশন সংজ্ঞায়িত করতে না চান তবে আপনি এটিকে তালিকা বোঝার সাথে অস্পষ্টভাবে অনুরূপ কিছুতে রূপান্তর করতে পারেন। শীর্ষ উত্তরের join
সমাধান থেকে Bণ নেওয়া :
>>> "".join([c for c in "strip my spaces" if not c.isspace()])
'stripmyspaces'