Python 以可变步长循环遍历数组或列表
我试图弄清楚如何以可变的步骤循环遍历数组或列表 例如,如果我有以下列表Python 以可变步长循环遍历数组或列表,python,list,Python,List,我试图弄清楚如何以可变的步骤循环遍历数组或列表 例如,如果我有以下列表 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 不要对循环使用
a = [0,0,1,0,0,1,0]
…并希望使用以下逻辑:
- 从索引0开始
- 如果距离两个点的索引为0,则移动两个点
- 如果距离两个点的索引为1,则移动一个点 然而,我不太清楚如何实现这个逻辑,因为我似乎无法更改我迭代的索引值
for idx,val in enumerate(a):
print(idx)
idx+=3
不要对循环使用
python中的for
循环与C或Java中的循环不同。在这些语言中,for
循环的具有初始条件、终止条件和每次循环运行时的增量。而在python中,for
循环更像是每个
循环的——您给它一个iterable对象,它为该iterable对象中的每个项运行代码
在运行iterable对象时修改它是一个坏主意,可能会产生难以预测的影响,并且通常会破坏代码
但是,您始终可以使用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)
或者,如果将增量分别更改为3
和2
,而不是2
和1
0 2 5
不要对
循环使用
python中的for
循环与C或Java中的循环不同。在这些语言中,for
循环的具有初始条件、终止条件和每次循环运行时的增量。而在python中,for
循环更像是每个
循环的——您给它一个iterable对象,它为该iterable对象中的每个项运行代码
在运行iterable对象时修改它是一个坏主意,可能会产生难以预测的影响,并且通常会破坏代码
但是,您始终可以使用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)
或者,如果将增量分别更改为3
和2
,而不是2
和1
0 2 5
你的推理相当混乱,我看不出有任何应用,但以下是我如何理解你的问题
原因是,您实际上并没有返回值,只是返回了索引+3,这是错误的。您试图做的是根据数组的值指向一个新的索引,如果它包含大于0的值,则返回该索引
您需要引用所需的索引,检查其值,然后返回包含值的索引
a = [0, 0, 1, 0, 0, 1, 0]
for i, v in enumerate(a):
if i == 0:
print(i)
next
if v == 0:
next
else
print(i)
但老实说,这是非常丑陋和非蟒蛇式的。让我们简单地检查[i]是否包含值,如果是,则返回索引
for i, v in enumerate(a):
if v or i == 0:
print(i)
如果v或i==0,则的目的是检查v是否有值,如果有,则打印索引。或者如果我们看的是i的第一个元素
如果要显式地将索引移动2,必须在开始时设置索引并使用while循环,因为enumerate在这里帮不上忙,实际上不允许移动索引
a = [0, 0, 1, 0, 0, 1, 0]
i = 0
while i < len(a) - 1: # -1 to avoid out of bounds error
print(i)
if a[i + 2] == 0:
i += 2
elif a[i + 2] == 1:
i += 1
print(i) # Final print statement for the last index at the end of the while loop
a=[0,0,1,0,0,1,0]
i=0
而i
我想让您记住一个事实,即此解决方案不能扩展到不同或更大的列表,这就是为什么不推荐它。通过简单地检查某个值是否存在,可以保证准确性
您只需根据索引是否包含值返回索引。即使对于非常大的列表,这也将非常快,并且将始终缩放,即使对于大于1的值也是如此
我认为您希望以不同方式执行此操作的唯一其他原因是,如果您正在执行字符串搜索算法。您的推理非常混乱,我看不到任何应用程序,但以下是我如何理解您的问题
原因是,您实际上并没有返回值,只是返回了索引+3,这是错误的。您试图做的是根据数组的值指向一个新的索引,如果它包含大于0的值,则返回该索引
您需要引用所需的索引,检查其值,然后返回包含值的索引
a = [0, 0, 1, 0, 0, 1, 0]
for i, v in enumerate(a):
if i == 0:
print(i)
next
if v == 0:
next
else
print(i)
但老实说,这是非常丑陋和非蟒蛇式的。让我们简单地检查[i]是否包含值,如果是,则返回索引
for i, v in enumerate(a):
if v or i == 0:
print(i)
如果v或i==0,则的目的是检查v是否有值,如果有,则打印索引。或者如果我们看的是i的第一个元素
如果要显式地将索引移动2,必须在开始时设置索引并使用while循环,因为enumerate在这里帮不上忙,实际上不允许移动索引
a = [0, 0, 1, 0, 0, 1, 0]
i = 0
while i < len(a) - 1: # -1 to avoid out of bounds error
print(i)
if a[i + 2] == 0:
i += 2
elif a[i + 2] == 1:
i += 1
print(i) # Final print statement for the last index at the end of the while loop
a=[0,0,1,0,0,1,0]
i=0
而i
我想让您记住一个事实,即此解决方案不能扩展到不同或更大的列表,这就是为什么不推荐它。通过简单地检查某个值是否存在,可以保证准确性
您只需根据索引是否包含值返回索引。即使对于非常大的列表,这也将非常快,并且将始终缩放,即使对于大于1的值也是如此
我认为您希望以不同方式执行此操作的另一个原因是,如果您正在执行字符串搜索算法