<p>这里不是推荐的方法,除非你反复地这样做(对于每个字母,多次),而是另一种方法:</p>
<p>我在速度上错了。再加上Python3的不同。</p>
<pre><code>import string
a = 'ababc'
firstchar = a[0]
trantab = string.maketrans(firstchar, '*')
def translate(mystr, firschar):
trantab = string.maketrans(firstchar, '*')
return firstchar + string.translate(mystr[1:], trantab)
def translate_iter(mystr, firschar, trantab):
return firstchar + string.translate(mystr[1:], trantab)
def replace(mystr, firstchar):
return firstchar + mystr[1:].replace(firstchar, '*')
In [29]: %timeit translate(a, firstchar)
1000000 loops, best of 3: 582 ns per loop
In [30]: %timeit replace(a, firstchar)
1000000 loops, best of 3: 240 ns per loop
In [32]: %timeit translate_iter(a, firstchar, trantab)
1000000 loops, best of 3: 376 ns per loop
</code></pre>
<p>编辑:不要对字符串使用join。没有理由这么做。</p>
<pre><code>import dis
In [36]: def add(a,b):
return a+b
....:
In [37]: def join(a,b):
return join((a,b))
....:
In [42]: dis.dis(add)
2 0 LOAD_FAST 0 (a)
3 LOAD_FAST 1 (b)
6 BINARY_ADD
7 RETURN_VALUE
In [43]: dis.dis(join)
2 0 LOAD_GLOBAL 0 (join)
3 LOAD_FAST 0 (a)
6 LOAD_FAST 1 (b)
9 BUILD_TUPLE 2
12 CALL_FUNCTION 1
15 RETURN_VALUE
</code></pre>
<p>您正在引发一个毫无意义的函数调用,它使代码可读性降低,并且总体上降低了性能。</p>
<p>我完全赞成为了可读性而牺牲性能,但不是牺牲性能和可读性。</p>