我有一个名为vbn
的首字母list
。我正在考虑一个函数,它在列表中的每个0
之后添加0
所以vbn = [1,0,2,3,0,4,5,0]
变成vbn = [1,0,0,2,3,0,0,4,5,0,0]
我使用了for
循环和.insert()
方法来实现这一点,并得到了下面的结果
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,0)
s += i+2
print(vbn)
产出:
[1, 0, 0, 2, 3, 0, 0, 4, 0, 5, 0]
根据我在代码中的理解,我的for
循环语句中的s
根本不受迭代的影响^不过,循环中的{
有人能解释一下为什么会这样吗?以及我如何解决这个问题
提前谢谢
如果不想迭代多个值,另一种方法是在循环中创建一个新数组:
您的问题是,您插入的索引在第一次插入后不再有效,因为您增加了列表的大小。如果将代码更改为插入
x
而不是0
,并在循环的每个迭代中打印vbn
,则可以看到发生了什么:输出:
如您所见,即使第二次插入也发生在错误的位置。可以通过向插入点添加偏移,并在每次插入时增加该偏移来解决此问题:
输出(在这种情况下,您可以看到
x
被插入到您期望的位置):只需将
x
更改回0
即可获得所需的结果。注意,我不确定s += i+2
代码的用途;我把它留了下来,假设你在循环后使用它您可以尝试创建一个新列表,并将vbn中的元素(非零数字或两个零)插入到新列表中
显示的结果是:
相关问题 更多 >
编程相关推荐