Предпочтительный способ удаления пробелов из строки
Я хочу удалить все пробелы из строки.
"как fa sdf sdfsdf"
Результат:
"asfasdfsdfsdf"
Есть несколько способов, которые я могу придумать для достижения этого, и мне интересно, какой из них лучший.
1.
"".join(" as fa sdf sdfsdf ".split())
2.
" as fa sdf sdfsdf ".replace(" ", "")
И я полагаю, что их больше.
Какой из них предпочтительнее?
Ответы
Ответ 1
Я считаю, что лучшим и наиболее эффективным методом является вторая версия " as fa sdf sdfsdf ".replace(" ", "")
, в качестве доказательства вы можете использовать модуль timeit
:
-
python -m timeit '"".join(" as fa sdf sdfsdf ".split())'
1000000 loops, best of 3: 0.554 usec per loop
-
python -m timeit '" as fa sdf sdfsdf ".replace(" ", "")'
1000000 loops, best of 3: 0.405 usec per loop
Ответ 2
replace(" ", "")
является самым ясным и самым кратким.
Ответ 3
Используйте это для одновременного удаления всего пробела:
import re
s = ' as fa sdf sdfsdf '
s = re.sub(r'\s+', '', s)
s
=> 'asfasdfsdfsdf'
Преимущество этого подхода заключается в том, что он устраняет все пробелы между символами - один, два, независимо от того, сколько их есть, потому что регулярное выражение r'\s+'
соответствует "одному или нескольким" пробельным символам, включая пробелы, вкладки и т.д.
Ответ 4
Использование replace
не удалит все пробельные символы (например, новые строки, вкладки):
>>> 'abc\t\ndef'.replace(" ", "")
'abc\t\ndef'
Я предпочитаю string.translate
:
>>> import string
>>> 'abc\t\ndef'.translate(None, string.whitespace)
'abcdef'
EDIT: string.translate
не работает для строк Unicode; вы можете использовать re.sub('\s', '', 'abc\n\tdef')
вместо этого.
Ответ 5
регулярное выражение
>>> str = " as fa sdf sdfsdf "
>>> import re
>>> re.sub(r'\s', '', str)
Ответ 6
re.sub(" ","", s)
- мой любимый.
Ответ 7
Просто чтобы выбросить еще один из микса:
from string import whitespace
ws = set(whitespace)
''.join(ch for ch in my_string if ch not in ws)
Ответ 8
Regex прост и работает. split()
немного сложнее. Regex предпочтительнее split()
.