繁体   English   中英

在跳过值的同时遍历python中的列表

[英]Iterate through a list in python while skipping values

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

这些值中的每一个都会增加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循环或其他方法来满足我的要求?

提前致谢

您的迭代不会停止,只有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语言,您不需要使用索引来访问列表中的项目。

在确认当前节点值可接受之前,您不应该修改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

将跟踪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 -test,因此if内的代码将在其余迭代中不执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM