मैं एक अजगर स्ट्रिंग में सभी रिक्त स्थान कैसे छीन सकता हूं? उदाहरण के लिए, मैं चाहता हूं कि एक स्ट्रिंग 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'
भले ही दक्षता प्राथमिक लक्ष्य नहीं है - स्पष्ट कोड लिखना - यहाँ कुछ प्रारंभिक समय हैं:
$ 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
भले ही re.sub 11.3x धीमा है, याद रखें कि आपकी अड़चनें अन्यत्र आश्वस्त हैं। अधिकांश कार्यक्रम इन 3 विकल्पों में से किसी के बीच अंतर को नोटिस नहीं करेंगे।
\s+
प्रतिस्थापन की तुलना में धीमी है । मैं फिर से साथ रहना होगा।
s.translate
किसी भी तरह से विधि की कोशिश की है ? यह शायद इस पृष्ठ पर दिखाए गए सभी तरीकों को धड़कता है।
None
- हालांकि, आश्चर्यजनक रूप से, जो इसे धीमा कर देता है ...
myString.translate(None, " \t\r\n\v")
। यह केवल रोजर की सबसे तेज़ (विभाजित और शामिल) तकनीक के रूप में 83% लेता है। सुनिश्चित नहीं है कि यह सभी सफेद अंतरिक्ष वर्णों को कवर करता है जो विभाजन करता है, लेकिन यह संभवतः अधिकांश ASCII अनुप्रयोगों के लिए पर्याप्त होगा।
>>> import re
>>> re.sub(r'\s+', '', 'strip my spaces')
'stripmyspaces'
किसी भी व्हाट्सएप वर्ण को भी संभालता है, जिसके बारे में आप नहीं सोच रहे हैं (मेरा विश्वास करो, बहुत सारे हैं)।
वैकल्पिक रूप से,
"strip my spaces".translate( None, string.whitespace )
और यहाँ Python3 संस्करण है:
"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(" ", "")
के साथ एक regex की कोशिश करो re.sub
। आप सभी व्हाट्सएप के लिए खोज कर सकते हैं और एक खाली स्ट्रिंग के साथ बदल सकते हैं।
\s
आपके पैटर्न में व्हाट्सएप पात्रों से मेल खाएगा - और न केवल एक स्थान (टैब, नईलाइन्स, आदि)। आप मैनुअल में इसके बारे में अधिक पढ़ सकते हैं ।
import re
re.sub(' ','','strip my spaces')
जैसा कि रोजर पाटे ने उल्लेख किया है निम्नलिखित कोड मेरे लिए काम करते हैं:
s = " \t foo \n bar "
"".join(s.split())
'foobar'
मैं निम्नलिखित कोड चलाने के लिए Jupyter नोटबुक का उपयोग कर रहा हूं:
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
निर्मित:
>>> "".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
टीएल / डॉ
पायथन 3.6 का उपयोग करके इस समाधान का परीक्षण किया गया था
Python3 में एक स्ट्रिंग से सभी स्पेस को स्ट्रिप करने के लिए आप निम्न फ़ंक्शन का उपयोग कर सकते हैं:
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
। तानाशाही के लिए पूर्ण प्रलेखन
यदि इष्टतम प्रदर्शन की आवश्यकता नहीं है और आप बस कुछ आसान मृत चाहते हैं, तो आप "isspace" विधि में निर्मित स्ट्रिंग वर्ग का उपयोग करके प्रत्येक वर्ण का परीक्षण करने के लिए एक मूल फ़ंक्शन को परिभाषित कर सकते हैं:
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
समाधान से उधार लेना :
>>> "".join([c for c in "strip my spaces" if not c.isspace()])
'stripmyspaces'