Это должно быть быстрее.
>>> import re
>>> string1 = 's#$%ERGdfhliisgdfjkskjdfW$JWLI3590823r'
>>> a = ['E', 'i', 'W']
>>> r = re.compile('[^%s]+' % ''.join(a))
>>> print r.sub('', string1)
EiiWW
Это даже быстрее, чем это.
>>> all_else = ''.join( chr(i) for i in range(256) if chr(i) not in set(a) )
>>> string1.translate(None, all_else)
'EiiWW'
44 мкс против 13 мкс на моем ноутбуке.
Как насчет этого?
(Редактировать: получилось, перевод дает лучшую производительность.)