1

文字列を削除する前にサブ文字列 (私の場合は空白) が文字列に存在するかどうかを確認するか、グローバルに使用する方が高速relace()です。

使用事例:

a = ['452 04','45204','455 04','88804']
for i,e in enumerate(a):
    if re.search(r"\s", e):
       a[i] = e.replace(' ','')

他の提案も大歓迎です。

4

2 に答える 2

10
import re

def with_re_search():
    a = ['452 04','45204','455 04','88804']
    for i,e in enumerate(a):
        if re.search(r"\s", e):
            a[i] = e.replace(' ','')

def with_in():
    a = ['452 04','45204','455 04','88804']
    for i,e in enumerate(a):
        if ' ' in e:
            a[i] = e.replace(' ','')

def without_search():
    a = ['452 04','45204','455 04','88804']
    for i,e in enumerate(a):
        a[i] = e.replace(' ','')

def with_translate():
    a = ['452 04','45204','455 04','88804']
    for i, e in enumerate(a):
        a[i] = e.translate(None,'')

from timeit import timeit as t
n = 1000000
t('f()', setup='from __main__ import with_re_search as f', number=n) # 5.37417006493
t('f()', setup='from __main__ import with_in as f',        number=n) # 1.04646992683
t('f()', setup='from __main__ import without_search as f', number=n) # 1.2475438118
t('f()', setup='from __main__ import with_translate as f', number=n) # 1.56214690208

を使用するre.searchと、他のオプションよりも絶対に遅くなりました。

これは、CPython 2.7.3、Ubuntu Linux 12.10 64 ビットで行われました。

更新: CPython 3.3.0 (同じマシン)。

t('f()', setup='from __main__ import with_re_search as f', number=n) # 24.345079875027295
t('f()', setup='from __main__ import with_in as f',        number=n) # 1.1399168980424292
t('f()', setup='from __main__ import without_search as f', number=n) # 1.3967725560069084   

Python 3 ではパラメーターを受け入れないstr.translateため、時間を計ることができませんでした。str.translatedeletechars

于 2013-11-14T08:20:12.870 に答える
2

スペースのみを削除する場合は、 を使用できますtranslate

a = ['452 04','45204','455 04','88804']
a = [item.translate(None, " ") for item in a]
print a
于 2013-11-14T08:16:13.007 に答える