1

この質問は以前に尋ねられましたが、私が見た迅速な回答では、望ましくない末尾のスペースも削除されます。

"   a     bc    "

なるべき

" a bc "

私は持っている

text = re.sub(' +', " ", text)

しかし、もっと速いものを望んでいます。私が見た(そしてうまくいかない)提案は

' '.join(text.split())

私はこれを多くの小さなテキストに対して行うので、末尾のスペースをチェックするだけではあまりうまくいかないことに注意してください。

4

3 に答える 3

2

このようなものを本当に最適化したい場合は、python ではなく C を使用してください。

cython を試してみてください。これは Python 構文とほぼ同じですが、C と同じくらい高速です。

ここにあなたが時間を計ることができるいくつかのものがあります:

import array
buf=array.array('c')
input="   a     bc    "
space=False
for c in input:
  if not space or not c == ' ': buf.append(c)
  space = (c == ' ')
buf.tostring()

また、使用してみてくださいcStringIO

import cStringIO
buf=cStringIO.StringIO()
input="   a     bc    "
space=False
for c in input:
  if not space or not c == ' ': buf.write(c)
  space = (c == ' ')
buf.getvalue()

しかし、繰り返しになりますが、そのようなことを本当に高速にしたい場合は、Python で実行しないでください。を使用しcythonます。ここで示した 2 つのアプローチは、Python インタープリターにより多くの作業を行うため、処理が遅くなる可能性があります。これらのことを高速にしたい場合は、Pythonでできるだけ少ないことを行います。ループはfor c in input、上記のアプローチのすべての理論上のパフォーマンスをすでに殺してしまう可能性があります。

于 2013-06-13T15:21:40.130 に答える
0

そこにある提案を少し書き直しただけですが、何かに小さな障害があるからといって、それが機能しないと想定する必要があるわけではありません。

次のようなことが簡単にできます。

front_space = lambda x:x[0]==" "
trailing_space = lambda x:x[-1]==" "
" "*front_space(text)+' '.join(text.split())+" "*trailing_space(text)
于 2013-06-13T15:22:11.147 に答える