我尝试使用zip创建一个基于range的for循环,但它并没有像预期的那样选择列表中的条目。代码如下:
for lower, current, higher in zip(energy[:len(energy)-1], energy[1:len(energy)-1], energy[1:]):
lowerE = round(findE(lower, current, tol),dec)
higherE = round(findE(current, higher, tol),dec)
print(str(lower) + " " + str(lowerE) + " " + str(current))
print(str(current) + " " + str(higherE) + " " + str(higher))
字符串
其中,findE(min,max,tol)是一种算法,它在min和max之间搜索数值求值函数的零,tol和dec是从tol计算的(目前tol是1 e-4和dec 4)。
使用start array energy = [0,0.5,2]运行循环,我期望输出为:
0降低E 0.5
0.5高E 2
higherE和lowerE是什么,我得到的是
0降低E 0.5
0.5高E 0.5
我的循环定义有什么问题吗
1条答案
按热度按时间yks3o0rb1#
你的循环并没有压缩到三个不同的偏移量,它只是压缩到两个偏移量。(因为
zip
在最短的可迭代对象耗尽时停止),您正在循环zip(energy, energy[1:], energy[1:])
,而您几乎肯定打算循环zip(energy, energy[1:], energy[2:])
(注意在最后一个切片中从1
到2
的变化),所以你得到了 * 三个 * 相邻的值,而不是一个值,后面是下一个重复两次的值。