Python的FOR循环中有没有“跳过区间”的技巧?

2 投票
2 回答
2586 浏览
提问于 2025-04-17 12:59

假设我有一个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个元素时。

撰写回答