python-3.x 拉链环未按预期运行

qij5mzcb  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(99)

我尝试使用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
我的循环定义有什么问题吗

yks3o0rb

yks3o0rb1#

你的循环并没有压缩到三个不同的偏移量,它只是压缩到两个偏移量。(因为zip在最短的可迭代对象耗尽时停止),您正在循环zip(energy, energy[1:], energy[1:]),而您几乎肯定打算循环zip(energy, energy[1:], energy[2:])(注意在最后一个切片中从12的变化),所以你得到了 * 三个 * 相邻的值,而不是一个值,后面是下一个重复两次的值。

相关问题