Python的FOR循环中有没有“跳过区间”的技巧?
假设我有一个Python(3)脚本,需要遍历一个二维数组(长度不定,但每个元素都是一个包含两个整数的数组,像下面的列表那样)。
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, 4]
,而不是[0, 2]
跳到[2, 2]
。这样做是否是最好的方法?是否应该使用for循环?
对于好奇的人:这段代码的目的是将电路线性化,以便任何电路(组件有限,比如现在只考虑电阻和电池)都可以用一个二维数组(像linCirc)来表示。如果你想的话,我可以发布我的完整代码,但我不想用无用的代码来占用空间。
2 个回答
4
为了支持任意可迭代的对象(不仅仅是像列表这样的序列),你可以使用consume()
这个方法:
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)
4
index = 0
while index < linCirc.length:
if linCirc[index][0] == 0:
index = index + linCirc[index][1]
else:
index = index + 1
希望这能提供你想要的功能。显然,你需要在这个基础上添加一些有用的代码——它只是从数组的开始运行到结束。可能还需要加一个索引检查,以确保在遇到数组末尾时,不会超出范围,特别是当[0, i]
的元素少于距离数组末尾i
个元素时。