zip 循环未按预期运行

zip loop not functioning as intended

提问人:Leonardo Lena 提问时间:11/5/2023 更新时间:11/5/2023 访问量:34

问:

我尝试使用 zip 制作一个基于 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 是 1e-4 和 dec 4)。

使用起始数组 energy = [0,0.5,2] 运行循环,我期望输出为:
0 降低 E 0.5 0.5
高于 E 2

其中 higherE 和 lowerE 是任何东西。相反,我得到的是
0 低 E 0.5 0.5 高 E 0.5
\

我的循环定义有什么问题?

python-3.x 循环 for-loop python-zip

评论

0赞 ShadowRanger 11/5/2023
旁注:毫无意义的冗长(并且启动速度稍慢)。负指数隐式地与被切片序列的长度相偏移,因此会达到相同的效果,这是鼓励的形式。这特别愚蠢,因为当最短的序列被激怒时就会停止,所以你根本不需要从结尾处剪掉任何东西。你会做所写完全相同的事情(这可能是关于出了什么问题的提示)。energy[:len(energy)-1]energy[:-1]zipzipzip(energy, energy[1:], energy[1:])

答:

1赞 ShadowRanger 11/5/2023 #1

您的循环不是在三个不同的偏移量上压缩,而只是在两个偏移量上压缩。消除每个切片中不必要的元素(因为当最短的可迭代对象耗尽时停止),您正在循环,而您几乎可以肯定打算循环(注意最后一个切片中从 to 的变化),因此您得到了三个相邻值,而不是一个值,然后是下一个值重复两次。zipzip(energy, energy[1:], energy[1:])zip(energy, energy[1:], energy[2:])12

评论

0赞 Leonardo Lena 11/5/2023
是的,你是对的!谢谢,这有效!(好吧,findE 算法没有,但至少我在正确的值之间搜索)