Python中的FOR循环中是否存在“跳过范围”技术?

时间:2012-02-13 22:58:56

标签: python arrays for-loop python-3.2

让我假装(因为它是真的)我有一个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)表示。如果你愿意,我会发布我的完整代码,但我不想用无用的代码堵塞它。

2 个答案:

答案 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)

example