Давайте посчитаем версии join
и re
:
In [3]: import re
In [4]: def withRe(theString): return re.sub('\D', '', theString)
...:
In [5]:
In [6]: def withJoin(S): return ''.join(c for c in S if c.isdigit())
...:
In [11]: s = "8-4545-225-144"
In [12]: %timeit withJoin(s)
100000 loops, best of 3: 6.89 us per loop
In [13]: %timeit withRe(s)
100000 loops, best of 3: 4.77 us per loop
Версия join
намного лучше, чем версия re
, но, к сожалению, на 50% медленнее.Так что, если производительность - проблема, элегантность, возможно, придется пожертвовать.
РЕДАКТИРОВАТЬ
In [16]: def withFilter(s): return filter(str.isdigit, s)
....:
In [19]: %timeit withFilter(s)
100000 loops, best of 3: 2.75 us per loop
Похоже, filter
является победителем производительности и читаемости