在Python中循环进行循环

时间:2018-08-02 08:17:30

标签: python python-2.7

我有以下代码。

    for idx in range(len(networks)):
        net_ = networks[idx]
        lastId=0
        for layerUptID in range(len(net_[1])):
            retNet,lastId=cn_.UpdateTwoConvLayers(deepcopy(net_),lastId)
            networks.append(retNet)
            if(lastId==-1):
               break

networks开头只有一个网。

在运行retNet,lastId=cn_.UpdateTwoConvLayers(deepcopy(net_),lastId)行之后,我还有6个网并附加到networks

因此,在完成此lastId ==-1之后,请使用first for loop返回len(networks) is 7

对于下一个idx, idx=1,然后继续。

然后,len(networks)为13。然后返回到first for loop。 此后,第一个for循环中断。 我期望idx is 2继续使用,但是会中断。

可能是什么问题?

3 个答案:

答案 0 :(得分:1)

如果尝试使用WHILE循环而不是FOR循环,则break语句将检查该循环是否在'networks'集合的最后一项上。 这样,网络长度将在每次循环迭代中计算出

答案 1 :(得分:0)

对于初学者:在要编辑的列表(或数据)上迭代或循环是不明智的做法。编码时请记住这一点。

这意味着,如果您打算编辑要循环播放的内容(在networks的情况下),那么遍历它的时间将会很糟糕。我建议将其分解为两个代码部分:

第一部分将创建一个新列表,列出您想要的WHILE循环。 第二部分替换了您用来生成所需内容的列表。

可能会出错的另一件事是net_[i]可能没有为某些i设置,您正在尝试在此处访问它:

    for layerUptID in range(len(net_[1])):

如果net_ [1]中没有内容怎么办?

为避免这些错误,通常验证数据是一个很好的起点。如果不为null,则继续,否则,打印错误。

这是我能想到的。希望对您有所帮助。

答案 2 :(得分:0)

如果我正确理解了您的问题,则是您向networks添加了新元素,即长度增加了networks,并期望for循环会吸收这种变化,好吧,让我们看看下面的代码片段

elements = [1]

indices = range(len(elements))
for index in indices:
    print('index is', index)
    elements.append(2)
    print('elements count is', len(elements))
    print('indices count is', len(indices))

输出是

index is 0
elements count is 2
indices count is 1

因此,尽管elements列表的长度已更改,但我们看到的是range循环中使用的for对象。发生这种情况是因为len返回了不可变的int对象,因此,当您更改list的长度时,其长度变成了不同的对象,并且range函数对此更改一无所知。

最后,我们可以在此处使用while循环

while networks:
    net_ = networks.pop()
    lastId = 0
    for layerUptID in range(len(net_[1])):
        retNet, lastId = cn_.UpdateTwoConvLayers(deepcopy(net_), lastId)
        networks.append(retNet)
        if lastId == -1:
            break