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

在python中迭代列表,同时跳过值,python,loops,Python,Loops,我有一个数字列表,我想迭代所有的数字,然后进行以下计算 将这些值中的每一个添加到负荷需求中,并从可用功率中减去。我的代码迭代到某一点并停止计算 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

我有一个数字列表,我想迭代所有的数字,然后进行以下计算

将这些值中的每一个添加到负荷需求中,并从可用功率中减去。我的代码迭代到某一点并停止计算

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新手,所以我的编码结构可能不太好。有没有办法使用
for
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
不手动增加
节点
索引。
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语言,您不需要使用索引来访问列表中的项目。

您的迭代不会停止,只有
语句中的条件变为
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
不手动增加
节点
索引。
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语言,您不需要使用索引来访问列表中的项目。

在循环中放入trace
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>=Ld
False
。从跟踪中可以看出,虽然代码更改了这些值,但它们的更改不足以影响
if
-测试,因此
if
中的代码在迭代的剩余时间内不会执行。

将跟踪
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>=Ld
False
。从跟踪中可以看出,尽管代码更改了这些值,但这些值的更改不足以影响
if
-test,因此,
if
中的代码将不会在迭代的其余部分执行。

在验证当前节点值可接受之前,不应修改
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

在验证当前节点值可接受之前,不应修改
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

是什么让你认为它停止了迭代?在每次迭代中,您将递减
Pa
并递增
Ld
;由于
num
只包含正数,一旦
Pa>=Ld
为false,则该
if
语句的主体将不再执行。循环完成后,查看
Pa
Ld
node
的值。此代码缩进是否正确?是的,这就是我想要了解的。我想在跳过
Pa>=Ld
变为false的值时继续迭代。您最初打算在每次迭代中更改
Pa
Ld
原始值吗?或者您想暂时更改它们,同时保持原始值的加和减?使用continue语句您认为它停止迭代的原因是什么?在每次迭代中,您将递减
Pa
并递增
Ld
;由于
num
只包含正数,一旦
Pa>=Ld
为false,则该
if
语句的主体将不再执行。循环完成后,查看
Pa
Ld
node
的值。此代码缩进是否正确?是的,这就是我想要了解的。我想在跳过
Pa>=Ld
变为false的值时继续迭代。您最初打算在每次迭代中更改
Pa
Ld
原始值吗?或者您想暂时更改它们,同时保持原始值的加和减?使用continue语句这对我很有效,并且满足了我的场景。谢谢。如果Pa node>=Ld+node
@droravr,您可以放弃temp,只需使用-
,我们可以这样做,但是如果条件为真,我们需要重新计算这些值
Pa节点
创建一个整数对象,将该对象绑定到一个名称以供以后使用比重新执行该算法更便宜。这没什么大不了的,但我更喜欢让我的代码更有效率,除非这样做会使代码过于混乱。当然,在我们需要优化它的情况下,一点混乱是可以忍受的这对我起了作用,满足了我的设想。谢谢。如果Pa node>=Ld+node
@droravr,您可以放弃temp,只需使用-
,我们可以这样做,但是如果条件为真,我们需要重新计算这些值
Pa节点
创建一个整数对象,将该对象绑定到一个名称以供以后使用比重新执行该算法更便宜。这没什么大不了的,但我更喜欢让我的代码更有效率,除非这样做会使代码过于混乱。当然,在我们需要优化它的情况下,一点混乱是可以忍受的