python - 以可变步骤循环遍历数组或列表
问题描述
我试图弄清楚如何以可变步骤循环遍历数组或列表。
例如,如果我有以下列表......
a = [0,0,1,0,0,1,0]
...并希望使用以下逻辑:
从索引 0 开始
如果距离两个点的索引为 0,则移动两个点
如果距离两个点的索引是 1,则移动一个点
但是,我不太清楚如何实现这个逻辑,因为我似乎无法更改我迭代的索引值。
为什么这个片段仍然返回 0-6 而不是 0,3,6 的值?
for idx,val in enumerate(a):
print(idx)
idx+=3
解决方案
不要使用for
循环。
for
python 中的循环与 C 或 Java 中的循环不同。在这些语言中,for
循环具有初始条件、终止条件和每次循环运行的增量。而在 python 中,for
循环更像是一个for each
循环——你给它一个可迭代对象,它会为该可迭代对象中的每个项目运行代码。
在运行时修改可迭代对象是一个坏主意,可能会产生难以预测的影响,并且通常会破坏您的代码。
但是,您始终可以使用while
循环:
a = [0,0,1,0,0,1,0]
idx = 0
while(idx < len(a) - 2):
print(idx)
if a[idx + 2] == 0:
idx += 2
elif a[idx + 2] == 1:
idx += 1
print(idx)
产生预期的输出
0 1 3 4 6
或者,如果您将增量分别更改为3
and 2
,而不是2
and 1
,
0 2 5