让我假装(因为它是真的)我有一个Python(3)脚本需要迭代一个2D数组(任何长度,但每个元素只是一个2个整数的数组,按照下面的列表)。 / p>
linCirc = [[1,10],
[2, 1],
[0, 2],
[2, 2],
[2, 3],
[2, 4],
[2, 0],
[2, 5]]
我想以递归的方式迭代这个可爱的东西,以便
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)表示。如果你愿意,我会发布我的完整代码,但我不想用无用的代码堵塞它。
答案 0 :(得分:4)
index = 0
while index < linCirc.length:
if linCirc[index][0] == 0:
index = index + linCirc[index][1]
else:
index = index + 1
希望这能提供您正在寻找的功能。显然,您必须为此添加一些有用的代码 - 它只是从数组的开始到结束运行。添加索引检查也可能会有所帮助,以确保在遇到距离数组末尾少于[0, i]
个元素的i
时,它不会超出范围。
答案 1 :(得分:4)
要支持任意迭代(不仅仅是列表等序列),您可以使用consume()
recipe:
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)