擅长:python、mysql、java
<p>所以你所做的是完全正确的,但是有更好的方法</p>
<p>下面是一些解决方案,运行时占用了100000个循环</p>
<h3>主签名:</h3>
<p>目标是要替换的字符,repl是替换字符</p>
<pre><code>def replace_all(text, targets=['a', 'e', 'i', 'o', 'u'], repl='_'):
text = # Something here to swap characters as an array
return ''.join(text) # Stitch it back together
</code></pre>
<h3>Bytearray</h3>
<p><a href="https://docs.python.org/3/library/stdtypes.html#bytearray" rel="nofollow noreferrer">Bytearray</a>是一个可变的数据结构,包含字符本身的列表。作为一种数据结构,它似乎是一种理想的选择,python中的字符串是不可变的,这可以避免不断的构造/破坏</p>
<pre><code>[chr(c) if chr(c) not in targets else repl for c in bytearray(text, 'utf-8')]
</code></pre>
<p>运行速度为0.365</p>
<h3>无bytearray</h3>
<p>这在一个简单的列表上操作,列表本身是可变的,但是字符是字符串,因此这里对技术上不可变的结构进行了一些修改</p>
<pre><code>[c if c not in targets else repl for c in text]
</code></pre>
<p>以0.179的速度运行</p>
<h3>地图</h3>
<p>这将函数映射到字符串中的每个字符</p>
<pre><code>map(lambda c: c if c not in targets else repl, text)
</code></pre>
<p>以0.265的速度运行</p>