代码之家  ›  专栏  ›  技术社区  ›  Sachith Muhandiram

在python中迭代列表,同时跳过值

  •  1
  • Sachith Muhandiram  · 技术社区  · 9 年前

    我有一个数字列表,我想遍历所有这些,并进行以下计算。

    load demand 并从中减去 available power 。我的代码迭代到某个点并停止计算。

    num = [5,2,1,2,8,1,2]
    
    Pa = 130            #available power
    Ld = 100            #total load demad
    Pn = 0              #new power request
    node =0
    
    for number in num:
        Pa -= num[node]
        Ld += num[node]
        if Pa >= Ld:
            Pna = Pa
            Lnd = Ld
            Pn += num[node]
    
            #print "new added value is : ", Pn
        node += 1
    
    print "Available power : ", Pna
    print "Demand power : ", Lnd
    

    输出为

    Available power :  120
    Demand power :  110
    

    迭代到第5个元素并停止,我想从第6个元素继续迭代,同时跳过以下值: Pa >= Ld

    我是Python新手,所以我的编码结构可能不太好。有什么方法可以满足我的要求吗 for if

    提前感谢

    3 回复  |  直到 9 年前
        1
  •  2
  •   PM 2Ring    9 年前

    你不应该修改 Pa Ld 直到验证当前节点值可接受为止。

    num = [5, 2, 1, 2, 8, 1, 2]
    
    Pa = 130            #available power
    Ld = 100            #total load demad
    Pn = 0              #new power request
    
    for node in num:
        temp_Pa = Pa - node
        temp_Ld = Ld + node
        if temp_Pa >= temp_Ld:
            Pa = temp_Pa
            Ld = temp_Ld
            Pn += node
            print(node, 'ok', Pn, Pa, Ld)
        else:
            print('skipping', node)
    
    print("Available power : ", Pa)
    print("Demand power : ", Ld)
    

    输出

    5 ok 5 125 105
    2 ok 7 123 107
    1 ok 8 122 108
    2 ok 10 120 110
    skipping 8
    1 ok 11 119 111
    2 ok 13 117 113
    Available power :  117
    Demand power :  113
    
        2
  •  2
  •   MarianD    9 年前

    迭代并没有停止,只有在 if 语句变为 False

    尽管如此,您可以替换代码的这一部分

    node =0
    
    for number in num:
        Pa -= num[node]
        Ld += num[node]
        if Pa >= Ld:
            Pna = Pa
            Lnd = Ld
            Pn += num[node]
    
            #print "new added value is : ", Pn
        node += 1
    

    用这个

    for node, number in enumerate(num):
        Pa -= num[node]
        Ld += num[node]
        if Pa >= Ld:
            Pna = Pa
            Lnd = Ld
            Pn += num[node]
    
            #print "new added value is : ", Pn
    

    不手动增加 node enumerate() 函数将为您完成此操作。

    然而,更好的解决方案是

    for number in num:
        Pa -= number
        Ld += number
        if Pa >= Ld:
            Pna = Pa
            Lnd = Ld
            Pn += number
    
            #print "new added value is : ", Pn
    

        3
  •  1
  •   BoarGules    9 年前

    print 循环中的语句如下:

    Pa -= num[node]
    Ld += num[node]
    print "Node",node, "Pa=", Pa, "Ld=",Ld
    

    在第5次迭代时打印

    Node 4 Pa= 112 Ld= 118
    Node 5 Pa= 111 Ld= 119
    Node 6 Pa= 109 Ld= 121
    

    Pa >= Ld False 。正如您从跟踪中看到的那样,虽然您的代码更改了这些值,但它们的更改并不足以影响 if -测试,因此