Как убрать все пробелы из строки - PullRequest
159 голосов
/ 18 сентября 2010

Как мне убрать все пробелы в строке питона? Например, я хочу, чтобы строка типа strip my spaces была превращена в stripmyspaces, но я не могу добиться этого с помощью strip():

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

Ответы [ 10 ]

271 голосов
/ 18 сентября 2010

Использование поведения str.split без параметра sep:

>>> 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 вариантов.

52 голосов
/ 18 сентября 2010
>>> import re
>>> re.sub(r'\s+', '', 'strip my spaces')
'stripmyspaces'

Также обрабатывает любые пробельные символы, о которых вы не думаете (поверьте, их много).

27 голосов
/ 20 мая 2013

С другой стороны,

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

А вот версия Python3:

"strip my spaces".translate(str.maketrans('', '', string.whitespace))
12 голосов
/ 18 сентября 2010

Самое простое - заменить:

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

В качестве альтернативы используйте регулярное выражение:

import re
re.sub(r"\s", "", "foo bar\t")
4 голосов
/ 20 ноября 2018

Удалите начальные пробелы в Python

string1="    This is Test String to strip leading space"
print string1
print string1.lstrip()

Удалите конечные или конечные пробелы в Python

string2="This is Test String to strip trailing space     "
print string2
print string2.rstrip()

Удалите белые пробелы из начала и конца строки в Python

string3="    This is Test String to strip leading and trailing space      "
print string3
print string3.strip()

Удалить все пробелы в python

string4="   This is Test String to test all the spaces        "
print string4
print string4.replace(" ", "")
3 голосов
/ 24 октября 2016
import re
re.sub(' ','','strip my spaces')
3 голосов
/ 18 сентября 2010

Попробуйте регулярное выражение с re.sub. Вы можете найти все пробелы и заменить их пустой строкой.

\s в вашем шаблоне будет соответствовать пробельным символам, а не только пробелу (табуляции, переводы строки и т. Д.). Вы можете прочитать больше об этом в руководстве .

2 голосов
/ 27 июня 2018

Как упоминал Роджер Пейт, следующий код работал для меня:

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
0 голосов
/ 04 апреля 2019

Применяются стандартные методы фильтрации списка, хотя они не так эффективны, как методы 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'

Benchmark:

>>> 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 голосов
/ 27 марта 2019

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)))

Объяснение

Метод Python str.translate - это встроенный метод класса str, он берет таблицу и возвращает копию строки, каждый символ которой отображается через переданную таблицу перевода. Полная документация для str.translate

Для создания таблицы перевода используется str.maketrans.Этот метод является еще одним встроенным методом класса str.Здесь мы используем его только с одним параметром, в данном случае это словарь, где ключи - это заменяемые символы, сопоставленные со значениями со значением замены символов.Возвращает таблицу перевода для использования с str.translate. Полная документация для str.maketrans

Модуль string в python содержит некоторые общие строковые операции и константы.string.whitespace - это константа, которая возвращает строку, содержащую все символы ASCII, которые считаются пробелами.Сюда входит пространство символов, табуляция, перевод строки, возврат, подача формы и вертикальная табуляция. Полная документация для строки

Во второй функции dict.fromkeys используется для создания словаря, в котором ключиявляются символами в строке, возвращаемыми string.whitespace каждый со значением None. Полная документация для dict.fromkeys

...