为什么我的循环中的循环只打印列表长度的一半?
Why is my loop in a loop only printing half the list length?
我有一个包含 60 个元素的列表,CashFlow。我正在构建一个新列表 ListNPV,其中每个元素都是使用原始 CashFlow 中的每个元素的方程式的结果。将总和添加到新列表后,我从原始 CashFlow 中删除了一个元素。
当我 运行 这个时,它恰好完成了列表的一半,所以有 30 个值。我将代码加倍以确保,结果从 30 / 30 下降到 15 / 45。我想要 0 / 60。使用 Canopy。
for payment in CashFlow:
NPV = 0
for i in range(len(CashFlow)):
NPV += CashFlow[i] / (1+MonthlyInterest)**i
NPV = round (NPV, 0)
ListNPV.append(NPV)
CashFlow.remove(payment)
print 'CashFlow = ', CashFlow
print 'ListNPV =', ListNPV
由于以下行
CashFlow.remove(payment)
上一行会影响 CashFlow.Remove 这一行的长度,您的所有迭代都将完成。之后就可以单独去掉现金流列表了。
从 the python docs 开始,您不应更改正在迭代的列表:
If you need to modify the sequence you are iterating over while inside
the loop (for example to duplicate selected items), it is recommended
that you first make a copy. Iterating over a sequence does not
implicitly make a copy.
在这种情况下,您甚至不使用循环变量 payment
,因此您可以稍微清理一下循环。这应该有效:
N = len(CashFlow)
for j in range(N):
NPV = 0
for i in range(j, N):
NPV += CashFlow[i] / (1+MonthlyInterest) ** (i - j)
NPV = round (NPV, 0)
ListNPV.append(NPV)
print 'CashFlow = ', CashFlow
print 'ListNPV =', ListNPV
我有一个包含 60 个元素的列表,CashFlow。我正在构建一个新列表 ListNPV,其中每个元素都是使用原始 CashFlow 中的每个元素的方程式的结果。将总和添加到新列表后,我从原始 CashFlow 中删除了一个元素。
当我 运行 这个时,它恰好完成了列表的一半,所以有 30 个值。我将代码加倍以确保,结果从 30 / 30 下降到 15 / 45。我想要 0 / 60。使用 Canopy。
for payment in CashFlow:
NPV = 0
for i in range(len(CashFlow)):
NPV += CashFlow[i] / (1+MonthlyInterest)**i
NPV = round (NPV, 0)
ListNPV.append(NPV)
CashFlow.remove(payment)
print 'CashFlow = ', CashFlow
print 'ListNPV =', ListNPV
由于以下行
CashFlow.remove(payment)
上一行会影响 CashFlow.Remove 这一行的长度,您的所有迭代都将完成。之后就可以单独去掉现金流列表了。
从 the python docs 开始,您不应更改正在迭代的列表:
If you need to modify the sequence you are iterating over while inside the loop (for example to duplicate selected items), it is recommended that you first make a copy. Iterating over a sequence does not implicitly make a copy.
在这种情况下,您甚至不使用循环变量 payment
,因此您可以稍微清理一下循环。这应该有效:
N = len(CashFlow)
for j in range(N):
NPV = 0
for i in range(j, N):
NPV += CashFlow[i] / (1+MonthlyInterest) ** (i - j)
NPV = round (NPV, 0)
ListNPV.append(NPV)
print 'CashFlow = ', CashFlow
print 'ListNPV =', ListNPV