是否有一个';跳过范围';Python中的FOR循环技术?
让我们假设(因为这是真的)我有一个Python(3)脚本,它需要在2D数组上迭代(任意长度,但每个元素只是一个包含2个整数的数组,如下表所示) 我想递归地迭代这个可爱的东西,这样是否有一个';跳过范围';Python中的FOR循环技术?,python,arrays,for-loop,python-3.2,Python,Arrays,For Loop,Python 3.2,让我们假设(因为这是真的)我有一个Python(3)脚本,它需要在2D数组上迭代(任意长度,但每个元素只是一个包含2个整数的数组,如下表所示) 我想递归地迭代这个可爱的东西,这样 for element in linCirc: if element[0] == 0: # skip element[1] elements 本质上,我所需要知道的是循环linCirc的最佳方法,然后当满足某些条件时,我可以控制跳过,而不是从linCirc.index(element)到lin
for element in linCirc:
if element[0] == 0:
# skip element[1] elements
本质上,我所需要知道的是循环linCirc的最佳方法,然后当满足某些条件时,我可以控制跳过,而不是从linCirc.index(element)
到linCirc.index(element)+1
,并跳过零个或多个元素。例如,我可以从[0,2]
到[2,2]
,而不是从[0,2]
到[2,4]
。这是最好的方法吗?是否应该使用for循环
出于好奇:此代码旨在将电路线性化,以便任何电路(具有有限的组件;例如,目前只有电阻器和电池)都可以用2D阵列(如linCirc)表示。如果您愿意,我将发布我的完整代码,但我不想用无用的代码来阻塞它。index=0
index = 0
while index < linCirc.length:
if linCirc[index][0] == 0:
index = index + linCirc[index][1]
else:
index = index + 1
当索引
希望这能提供您想要的功能。显然,您必须为此添加一些有用的代码—它只是从数组的开始到结束运行。添加索引检查也可能有帮助,以确保在遇到数组末尾小于
i
的[0,i]
元素时不会超出范围。要支持任意iterable(而不仅仅是list等序列),可以使用:
太棒了,这正是我需要的!遗憾的是,我不能使用for循环的功能,因为它在python中非常方便——但这是可行的,这才是重要的。谢谢顺便说一句,您可以在linCirc中为a、b执行:
:如果不是a:#跳过b元素
,而不是使用索引元素[0],元素[1]
。
index = 0
while index < linCirc.length:
if linCirc[index][0] == 0:
index = index + linCirc[index][1]
else:
index = index + 1
it = iter(linCirc)
for element in it:
if element[0] == 0:
# skip element[1] elements
n = element[1]
next(islice(it, n, n), None) # see consume() recipe from itertools docs
print(element)