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

时间:2017-08-06 14:15:13

标签: python loops

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

其中每个值都添加到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变为false的值。

我是Python的新手,所以我的编码结构可能不太好。有没有办法使用forif循环或其他方法来满足我的要求?

提前致谢

3 个答案:

答案 0 :(得分:2)

您的迭代不会停止,只有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

Python不是C语言,您不需要使用索引来访问列表中的项目。

答案 1 :(得分:2)

在验证当前节点值是否可接受之前,您不应修改PaLd

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 :(得分:1)

在循环中放置跟踪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

在节点4,测试Pa >= LdFalse。正如您从跟踪中看到的那样,虽然您的代码更改了这些值,但它并未对其进行足够的更改以影响if - 测试,因此if中的代码赢得了&#39; t执行迭代的其余部分。