Python文字列のすべてのスペースを削除するにはどうすればよいですか?たとえば、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
正規表現はキャッシュされているため、想像するほど遅くはありません。事前にコンパイルすることはいくつかの助けになりますが、実際にこれを呼び出す場合にのみ問題になりますmany times:
$ 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つの選択肢の違いに気付かないでしょう。
>>> 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))
最も簡単なのはreplaceを使用することです:
"foo bar\t".replace(" ", "").replace("\t", "")
または、正規表現を使用します。
import re
re.sub(r"\s", "", "foo bar\t")
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')
ロジャー・ペイトが言及したように、次のコードが私のために働いた:
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
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
の別の組み込みクラスメソッドです。ここでは、1つのパラメーター(この場合は辞書)のみで使用します。この場合、キーは、文字置換値を持つ値にマップされる置換される文字です。 str.translate
で使用する変換テーブルを返します。 str.maketransの完全なドキュメント
Pythonのstring
モジュールには、いくつかの一般的な文字列操作と定数が含まれています。 string.whitespace
は、空白と見なされるすべてのASCII文字を含む文字列を返す定数です。これには、文字スペース、タブ、ラインフィード、リターン、フォームフィード、および垂直タブが含まれます。 文字列の完全なドキュメント
2番目の関数では、dict.fromkeys
を使用して辞書が作成され、キーはstring.whitespace
によって返される文字列内の文字であり、それぞれの値はNone
になります。 dict.fromkeysの完全なドキュメント
リストをフィルタリングする標準的な手法が適用されますが、それらは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