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 64bit.
ОБНОВЛЕНИЕ: В 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
Примечание не мог время str.translate
, потому что str.translate
в Python 3 не принимает deletechars
параметр.
Вы измерили? –
Я этого не делал. Я подумал, что кто-то может ответить из опыта? – LarsVegas
мой опыт: 1) простая программа - лучшая программа. 2) если вы хотите * знать *, если ваша программа будет быстрее в разных условиях, единственный способ - это время вашего конкретного кода – Vorsprung