Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的循环只能打印列表长度的一半?_Python_Loops - Fatal编程技术网

Python 为什么我的循环只能打印列表长度的一半?

Python 为什么我的循环只能打印列表长度的一半?,python,loops,Python,Loops,我有一个60个元素的列表,现金流。我正在建立一个新的列表ListNPV,其中每个元素都是使用原始现金流中每个元素的等式的结果。将金额添加到新列表后,我从原始现金流中删除了一个元素 当我运行这个程序时,它正好完成了列表的一半,因此有30个值。我把代码翻了一倍来确保,结果是从30/30降到了15/45。我要0/60。使用树冠 for payment in CashFlow: NPV = 0 for i in range(len(CashFlow)):

我有一个60个元素的列表,现金流。我正在建立一个新的列表ListNPV,其中每个元素都是使用原始现金流中每个元素的等式的结果。将金额添加到新列表后,我从原始现金流中删除了一个元素

当我运行这个程序时,它正好完成了列表的一半,因此有30个值。我把代码翻了一倍来确保,结果是从30/30降到了15/45。我要0/60。使用树冠

 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)
上面这一行会影响现金流的长度。删除这一行,所有的迭代都会完成。之后,您可以单独删除现金流列表。

从中,您不应更改正在迭代的列表:

如果需要修改在内部迭代的序列 建议使用循环(例如复制选定项目) 你先复印一份。在序列上迭代不会导致错误 隐式复制

在这种情况下,您甚至不使用循环变量,
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

你在说什么语言?它看起来像Python,但是。。。还有,为什么你觉得这是最好的方法?您正在对正在迭代的同一个列表进行变异,这在许多情况下是一种不好的做法。它是Python,使用新的环境。这是我能想到的最好的东西,如果有其他想法,我会很感激的。对-但我需要根据现金流减去一个元素来计算ListNPV的新增加值。为此,将所有现金流内容复制到另一个集合中,然后循环一个集合,该集合应保持不变,并修改其他集合,并在此基础上进行计算。循环和修改同一个集合会导致案例难以调试和修复。使用
j=1
i=0
进行迭代将导致
(1+月利息)**(i-j)
部分等式的负幂,这在OP中不存在。编辑:哦,我知道这是不可能的,很好的解决方案。