<p>作为解决方案的一个选项,您可以使用<code>s_dict['s'] = '%s%s%s' % (s_dict['s'][:pos], char, s_dict['s'][pos+1:])</code>而不是do list和join</p>
<pre><code>In [1]: s_dict = {'s' : 'ATGCGTGACGTGA' * 10}
...: pos_change = {'s' : ['4_h', '6_k', '7_p', '10_r']}
...:
...: def list_join():
...: for key in s_dict:
...: for position in pos_change[key]:
...: pos = int(position.split("_")[0])
...: char = position.split("_")[1]
...: l = list(s_dict[key])
...: l[pos]= char
...: s_dict[key] = "".join(l)
...:
...: def by_str():
...: for key in s_dict:
...: for position in pos_change[key]:
...: pos = int(position.split("_")[0])
...: char = position.split("_")[1]
...: values = s_dict['s'][:pos], char, s_dict['s'][pos+1:]
...: s_dict['s'] = '%s%s%s' % values
...:
In [2]: %timeit list_join()
11.7 µs ± 191 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [3]: %timeit by_str()
4.29 µs ± 46.7 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
</code></pre>