<p>您正在修改原始字符串,<code>replace</code>正在替换“所有出现”</p>
<p>下面是打印输出的一部分,它是如何生成您看到的输出的:</p>
<pre><code>...
string is now 56333
replacing 3 with 3
string is now 56333
replacing 3 with 4
string is now 56444
...
</code></pre>
<p>您可以看到,我们成功地获得了您想要的<code>56333</code>,但是您想要用<code>str(n)</code>(实际值:<code>4</code>)替换<code>str[2]</code>(实际值:<code>3</code>),它替换了<code>3</code>的所有出现</p>
<p>此特定场景的一个解决方法是复制字符串:</p>
<pre><code>def prime_replace(x, l = []):
lst = []
string = str(x)
for n in range(10):
newstr = string
for i in l:
newstr = newstr.replace(string[i], str(n))
lst.append(int(newstr))
return lst
print prime_replace(x = 56243, l = [2, 3])
</code></pre>
<p>输出:</p>
<pre><code>[56003, 56113, 56223, 56333, 56443, 56553, 56663, 56773, 56883, 56993]
</code></pre>
<h3><a href="http://ideone.com/yNhKt7" rel="nofollow noreferrer">Demo (not recommended)</a></h3>
<p>但是,<a href="https://docs.python.org/2/library/stdtypes.html#string-methods" rel="nofollow noreferrer">^{<cd1>}</a>可能不是最佳选择,因为它将用“newstring”替换所有出现的“oldstring”。看起来您真正想做的是将<code>string</code>中的索引处的<code>l</code>更改为<code>range(10)</code>中的下一个值,我们可以通过索引和附加来实现这一点:</p>
<pre><code>def prime_replace(x, l = []):
lst = []
string = str(x)
for n in range(10):
newstr = string
for i in l:
newstr = newstr[0:i]+str(n)+newstr[i+1:];
lst.append(int(newstr))
return lst
</code></pre>
<h2><a href="http://ideone.com/ylUZJU" rel="nofollow noreferrer">Demo (better)</a></h2>