파이썬 문자열의 모든 공백을 어떻게 제거합니까? 예를 들어, 문자열 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.3 배 더 느리지 만 병목 현상은 다른 곳에서도 확실하게 기억하십시오. 대부분의 프로그램은이 3 가지 선택의 차이점을 인식하지 못합니다.
\s+
대체 보다 느릴 것 입니다. 나는 다시 붙어 있습니다.
s.translate
방법 을 사용해 보셨습니까 ? 아마도이 페이지에 표시된 모든 방법을 능가 할 것입니다.
None
하지는 않지만 놀랍게도 속도가 느려질 수 있습니다.
myString.translate(None, " \t\r\n\v")
. Roger의 가장 빠른 (분할 및 조인) 기술에 비해 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(" ", "")
로 정규식을 사용해보십시오 re.sub
. 모든 공백을 검색하고 빈 문자열로 바꿀 수 있습니다.
\s
패턴에서 공백 (탭, 줄 바꿈 등)뿐만 아니라 공백 문자와 일치합니다. 자세한 내용 은 설명서를 참조하십시오 .
import re
re.sub(' ','','strip my spaces')
Roger Pate가 언급했듯이 다음 코드가 나를 위해 일했습니다.
s = " \t foo \n bar "
"".join(s.split())
'foobar'
Jupyter Notebook을 사용하여 다음 코드를 실행하고 있습니다.
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
TL / DR
이 솔루션은 Python 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의 내장 클래스 메소드이며, 테이블을 가져와 전달 된 변환 표를 통해 각 문자가 맵핑 된 문자열의 사본을 리턴합니다.str.translate에 대한 전체 문서
번역 테이블을 만드는 str.maketrans
데 사용됩니다. 이 메소드는의 또 다른 내장 클래스 메소드입니다 str
. 여기서는 하나의 매개 변수 (이 경우 사전)와 함께 사용합니다. 여기서 키는 대체 될 문자와 문자 대체 값으로 매핑됩니다. 와 함께 사용할 변환 표를 반환합니다 str.translate
. str.maketrans에 대한 전체 문서
string
파이썬 의 모듈에는 일반적인 문자열 연산과 상수가 포함되어 있습니다. string.whitespace
공백으로 간주되는 모든 ASCII 문자가 포함 된 문자열을 반환하는 상수입니다. 여기에는 문자 공간, 탭, 줄 바꿈, 반환, 용지 공급 및 세로 탭이 포함됩니다.문자열에 대한 전체 설명서
두 번째 함수 dict.fromkeys
에서는 키가 string.whitespace
value 가있는 문자열로 반환되는 문자 인 사전을 만드는 데 사용됩니다 None
. dict.fromkeys에 대한 전체 문서
최적의 성능이 요구되지 않고 단순히 단순한 것을 원한다면 문자열 클래스의 내장 "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'