我有一个数字列表,我想迭代所有这些并进行以下计算。
其中每个值都添加到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
循环或其他方法来满足我的要求?
提前致谢
答案 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)
在验证当前节点值是否可接受之前,您不应修改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 :(得分: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 >= Ld
为False
。正如您从跟踪中看到的那样,虽然您的代码更改了这些值,但它并未对其进行足够的更改以影响if
- 测试,因此if
中的代码赢得了&#39; t执行迭代的其余部分。