2

让我们假设(因为这是真的)我有一个 Python (3) 脚本,它需要遍历一个 2D 数组(任意长度,但每个元素只是一个 2 个整数的数组,如下面的列表所示)。

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]to [2, 2],我可以从[0, 2]to [2, 4]。这是最好的方法吗?是否应该涉及 for 循环?

对于好奇的人:此代码旨在使电路线性化,以便任何电路(具有有限组件;例如,现在只有电阻器和电池)都可以用 2D 数组(如 linCirc)表示。如果你愿意,我会发布我的完整代码,但我不想用无用的代码堵塞它。

4

2 回答 2

4
index = 0
while index < linCirc.length:
   if linCirc[index][0] == 0:
       index = index + linCirc[index][1]
   else:
       index = index + 1

希望这提供了您正在寻找的功能。显然,您必须为此添加一些有用的代码——它只是从数组的开始运行到结束。添加索引检查也可能会有所帮助,以确保它在遇到[0, i]小于i数组末尾的元素时不会超出范围。

于 2012-02-13T23:03:37.137 回答
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)

例子

于 2012-02-13T23:58:53.850 回答