স্ট্রিং থেকে সমস্ত সাদা স্থান কীভাবে ফেলা যায়


179

আমি কীভাবে অজগর স্ট্রিংয়ের সমস্ত স্পেস ফাঁকা করব? উদাহরণস্বরূপ, আমি চাই একটি স্ট্রিং strip my spacesরূপান্তরিত হোক stripmyspaces, তবে আমি এটিটি সম্পাদন করতে পারব না strip():

>>> 'strip my spaces'.strip()
'strip my spaces'

13
নোট করুন যে স্ট্রিং স্ট্রিপ কেবল অগ্রণী এবং পেছনের সাদা স্থানকে প্রভাবিত করে।

উত্তর:


311

কোনও 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+প্রতিস্থাপনের চেয়ে ধীর । আমি পুনরায় সাথে থাকি।
ওটিজেড

@OTZ: আপনি অবাক হতে পারেন, তবে "মনে রাখবেন" নোটটি দেখুন।

পছন্দ করুন মজাদার. আপনি কি s.translateকোনও সুযোগে পদ্ধতিটি ব্যবহার করে দেখেছেন? এটি সম্ভবত এই পৃষ্ঠায় প্রদর্শিত সমস্ত পদ্ধতিকে প্রহার করে।
ওটিজেড

@ রজার পেট: অনুবাদ করার জন্য আপনার 'টেবিল' যুক্তি লাগবে না, এটি হতে পারে None- যদিও আশ্চর্যের বিষয় এটি এটিকে ধীর করে তোলে ...
মার্টিনিউ

1
ব্যবহার করে দেখুন myString.translate(None, " \t\r\n\v")। এটি কেবলমাত্র রজারের দ্রুততম (বিভক্ত এবং যোগদান) কৌশল হিসাবে 83% সময় নেয়। নিশ্চিত নয় যে এটি সমস্ত সাদা স্থানের অক্ষরগুলিকে বিভক্ত করে তোলে তবে এটি সম্ভবত বেশিরভাগ এএসসিআইআই অ্যাপ্লিকেশনের পক্ষে যথেষ্ট।
ব্রায়ানমার্ন

60
>>> import re
>>> re.sub(r'\s+', '', 'strip my spaces')
'stripmyspaces'

এমন কোনও সাদা বর্ণমালা অক্ষরও পরিচালনা করে যা আপনি ভাবছেন না (বিশ্বাস করুন, প্রচুর পরিমাণে আছে)।


3
এটি কোনও সমাধানের অনেক কম হ্যাকি তবে গ্রহণযোগ্য উত্তর।
জন স্মিথ

এটি অন্যান্য উত্তরগুলির তুলনায় আরও স্পষ্ট, সুতরাং এটি আমার জন্য কেক লাগে।
ত্রিস্তান

34

অন্যথা,

"strip my spaces".translate( None, string.whitespace )

এবং এখানে পাইথন 3 সংস্করণ রয়েছে:

"strip my spaces".translate(str.maketrans('', '', string.whitespace))

এটি সবচেয়ে পাইথনিক বলে মনে হচ্ছে। কেন এটি শীর্ষে উঠেছে না?
আরবিপি

উত্তরে পাইথন 3 কোড কাজ করে। @ ড্যানমেনেসের মন্তব্য অপ্রচলিত
igo

3
NameError: name 'string' is not defined
জেলফির কালটস্টল

@ জেলফিরকাল্টসাহাল আপনার প্রয়োজনimport string
শাহরিয়ার সালজুফি

13

সরলতমটি হ'ল প্রতিস্থাপনটি ব্যবহার করুন:

"foo bar\t".replace(" ", "").replace("\t", "")

বিকল্পভাবে, একটি নিয়মিত এক্সপ্রেশন ব্যবহার করুন:

import re
re.sub(r"\s", "", "foo bar\t")

10

পাইথনে শুরু করার স্থানগুলি সরান

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(" ", "")

3

এর সাথে একটি রেজেক্স চেষ্টা করুন re.sub। আপনি সমস্ত সাদা স্থান অনুসন্ধান করতে পারেন এবং খালি স্ট্রিংয়ের সাথে প্রতিস্থাপন করতে পারেন।

\sআপনার নিদর্শনগুলিতে সাদা জায়গার অক্ষরের সাথে মিল থাকবে - এবং কেবল একটি স্থান নয় (ট্যাবগুলি, নিউলাইনগুলি, ইত্যাদি), ম্যানুয়ালটিতে আপনি এটি সম্পর্কে আরও পড়তে পারেন ।


আমি কীভাবে রেজিজেসগুলি ব্যবহার করব সে সম্পর্কে আমি জানি না :(
ভুল ব্যবহারকারীর নাম

@ ররংউজারনেম: পুনরায় মডিউল ম্যানুয়াল পৃষ্ঠায় একটি লিঙ্ক সহ আপডেট হয়েছে।
ম্যাথু ইসেলিন

2
import re
re.sub(' ','','strip my spaces')

3
তাই আপনাকে স্বাগতম। যদিও আমরা আপনার উত্তরের জন্য আপনাকে ধন্যবাদ জানাই, অন্য উত্তরগুলির উপরে যদি এটি অতিরিক্ত মান সরবরাহ করে তবে এটি আরও ভাল। এই ক্ষেত্রে, আপনার উত্তর অতিরিক্ত মান সরবরাহ করে না, যেহেতু অন্য ব্যবহারকারী ইতিমধ্যে সমাধানটি পোস্ট করেছেন। যদি পূর্বের উত্তরটি আপনার পক্ষে সহায়ক ছিল, আপনার যথেষ্ট সুনামের পরে আপনি এটি দিয়েছিলেন
ম্যাক্সিমিলিয়ান পিটারস

এটি "সমস্ত সাদা স্থান কীভাবে সরিয়ে ফেলতে হবে" এই প্রশ্নের উত্তর দেয় না। এটি কেবল স্থানগুলি সরিয়ে দেয়
নিক

2

রজার প্যাট দ্বারা উল্লিখিত কোডটি আমার পক্ষে কাজ করেছে:

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

2

একটি তালিকা ফিল্টার করার স্ট্যান্ডার্ড কৌশলগুলি প্রয়োগ হয়, যদিও তারা পদ্ধতি split/joinবা translateপদ্ধতির মতো দক্ষ নয় ।

আমাদের হোয়াইটস্পেসের একটি সেট দরকার:

>>> import string
>>> ws = set(string.whitespace)

filterbuiltin:

>>> "".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

0

টি এল / ডিআর

পাইথন ৩.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.translateStr.maketrans জন্য সম্পূর্ণ ডকুমেন্টেশন

stringপাইথন মধ্যে মডিউল কিছু সাধারণ স্ট্রিং অপারেশন এবং ধ্রুবক রয়েছে। string.whitespaceএকটি ধ্রুবক যা হোয়াইটস্পেস হিসাবে বিবেচিত সমস্ত ASCII অক্ষর সমন্বিত একটি স্ট্রিং দেয়। এর মধ্যে অক্ষরের স্থান, ট্যাব, লাইনফিড, রিটার্ন, ফর্মফিড এবং উল্লম্ব ট্যাব অন্তর্ভুক্ত রয়েছে। স্ট্রিংয়ের জন্য সম্পূর্ণ ডকুমেন্টেশন

দ্বিতীয় ফাংশনটিতে dict.fromkeysএকটি অভিধান তৈরি করতে ব্যবহৃত হয় যেখানে কীগুলি স্ট্রিংয়ের অক্ষরের string.whitespaceসাথে মান সহ প্রত্যেকে ফিরিয়ে দেয় Noneডিক.ফ্রমকিগুলির জন্য সম্পূর্ণ ডকুমেন্টেশন


0

যদি সর্বোত্তম পারফরম্যান্সের প্রয়োজন না হয় এবং আপনি কেবল মৃত সাধারণ কিছু চান, আপনি স্ট্রিং ক্লাসের অন্তর্নির্মিত "ইস্পেস" পদ্ধতিটি ব্যবহার করে প্রতিটি চরিত্র পরীক্ষা করার জন্য একটি মৌলিক ফাংশনটি সংজ্ঞায়িত করতে পারেন:

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'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.