Если набор символов был больше, использование наборов, как показано ниже, может быть быстрее. На самом деле это немного медленнее, чем a.py.
dec = set('1234567890.')
a = '27893jkasnf8u2qrtq2ntkjh8934yt8.298222rwagasjkijw'
for i in xrange(1000000):
''.join(ch for ch in a if ch in dec)
По крайней мере, в моей системе вы можете сэкономить немного времени (и памяти, если ваша строка была достаточно длинной, чтобы иметь значение), используя выражение генератора вместо понимания списка в a.py:
a = '27893jkasnf8u2qrtq2ntkjh8934yt8.298222rwagasjkijw'
for i in xrange(1000000):
''.join(c for c in a if c in '1234567890.')
О, и вот самый быстрый способ, который я нашел на этой тестовой строке (намного быстрее, чем регулярное выражение), если вы делаете это много, много раз и готовы мириться с накладными расходами на создание пары символов таблицы.
chrs = ''.join(chr(i) for i in xrange(256))
deletable = ''.join(ch for ch in chrs if ch not in '1234567890.')
a = '27893jkasnf8u2qrtq2ntkjh8934yt8.298222rwagasjkijw'
for i in xrange(1000000):
a.translate(chrs, deletable)
В моей системе это выполняется за ~ 1,0 секунды, а регулярное выражение b.py - за 4,3 секунды.