[英]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新手,所以我的编码结构可能不好。 有没有一种方法可以使用for
和if
循环或其他方法来满足我的要求?
提前致谢
您的迭代不会停止,只有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语言,您不需要使用索引来访问列表中的项目。
在确认当前节点值可接受之前,您不应该修改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
将跟踪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
内的代码将在其余迭代中不执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.