可以使用str.translate和string.maketrans這將是不鏈接調用等最有效的方法做到這一點..:
In [6]: from string import maketrans
In [7]: s = "Hello----..... World"
In [8]: table = maketrans(' .-',"___")
In [9]: print(s.translate(table))
Hello_____________World
時序:
In [12]: %%timeit
....: s = "Hello----..... World"
....: table = maketrans(' .-',"___")
....: s.translate(table)
....:
1000000 loops, best of 3: 1.14 µs per loop
In [13]: timeit s.replace('-','_').replace('.', '_').replace(' ', '_')
100000 loops, best of 3: 2.2 µs per loop
In [14]: %%timeit
text = "Hello----..... World"
for ch in [' ', '.', '-']:
if ch in text:
text = text.replace(ch,'_')
....:
100000 loops, best of 3: 3.51 µs per loop
In [18]: %%timeit
....: s = "Hello----..... World"
....: re.sub(r"[ .-]", "_", s)
....:
100000 loops, best of 3: 11 µs per loop
即使預編譯模式離開10μs所以正則表達式是迄今爲止效率最低的方法。
In [20]: patt= re.compile(r"[ .-]")
In [21]: %%timeit
s = "Hello----..... World"
patt.sub("_", s)
....:
100000 loops, best of 3: 9.98 µs per loop
預創建表得到我們失望到納秒:
In [22]: %%timeit
s = "Hello----..... World"
s.translate(table)
....:
1000000 loops, best of 3: 590 ns per loop
這是不正確,最快的方式是不是鏈接,也做'如果CH文本'是多餘的,當你可以只'文本= text.replace(ch,'_')',如果沒有任何東西可以替換,任何東西都不會被替換 –