<p>您的问题是,您插入的索引在第一次插入后不再有效,因为您增加了列表的大小。如果将代码更改为插入<code>x</code>而不是<code>0</code>,并在循环的每个迭代中打印<code>vbn</code>,则可以看到发生了什么:</p>
<pre class="lang-py prettyprint-override"><code>vbn = [1,0,2,3,0,4,5,0]
s = 0
for i,j in enumerate(vbn[s:]):
if j == 0:
vbn.insert(i+1,'x')
s += i+2
print(vbn)
</code></pre>
<p>输出:</p>
<pre><code>[1, 0, 2, 3, 0, 4, 5, 0]
[1, 0, 'x', 2, 3, 0, 4, 5, 0]
[1, 0, 'x', 2, 3, 0, 4, 5, 0]
[1, 0, 'x', 2, 3, 0, 4, 5, 0]
[1, 0, 'x', 2, 3, 'x', 0, 4, 5, 0]
[1, 0, 'x', 2, 3, 'x', 0, 4, 5, 0]
[1, 0, 'x', 2, 3, 'x', 0, 4, 5, 0]
[1, 0, 'x', 2, 3, 'x', 0, 4, 'x', 5, 0]
</code></pre>
<p>如您所见,即使第二次插入也发生在错误的位置。可以通过向插入点添加偏移,并在每次插入时增加该偏移来解决此问题:</p>
<pre class="lang-py prettyprint-override"><code>vbn = [1,0,2,3,0,4,5,0]
s = 0
o = 1
for i,j in enumerate(vbn[s:]):
if j == 0:
vbn.insert(i+o,'x')
s += i+2
o += 1
print(vbn)
</code></pre>
<p>输出(在这种情况下,您可以看到<code>x</code>被插入到您期望的位置):</p>
<pre><code>[1, 0, 2, 3, 0, 4, 5, 0]
[1, 0, 'x', 2, 3, 0, 4, 5, 0]
[1, 0, 'x', 2, 3, 0, 4, 5, 0]
[1, 0, 'x', 2, 3, 0, 4, 5, 0]
[1, 0, 'x', 2, 3, 0, 'x', 4, 5, 0]
[1, 0, 'x', 2, 3, 0, 'x', 4, 5, 0]
[1, 0, 'x', 2, 3, 0, 'x', 4, 5, 0]
[1, 0, 'x', 2, 3, 0, 'x', 4, 5, 0, 'x']
</code></pre>
<p>只需将<code>x</code>更改回<code>0</code>即可获得所需的结果。注意,我不确定<code>s += i+2</code>代码的用途;我把它留了下来,假设你在循环后使用它</p>