提问人:Leonardo Lena 提问时间:11/5/2023 更新时间:11/5/2023 访问量:34
zip 循环未按预期运行
zip loop not functioning as intended
问:
我尝试使用 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
\
我的循环定义有什么问题?
答:
1赞
ShadowRanger
11/5/2023
#1
您的循环不是在三个不同的偏移量上压缩,而只是在两个偏移量上压缩。消除每个切片中不必要的元素(因为当最短的可迭代对象耗尽时停止),您正在循环,而您几乎可以肯定打算循环(注意最后一个切片中从 to 的变化),因此您得到了三个相邻值,而不是一个值,然后是下一个值重复两次。zip
zip(energy, energy[1:], energy[1:])
zip(energy, energy[1:], energy[2:])
1
2
评论
0赞
Leonardo Lena
11/5/2023
是的,你是对的!谢谢,这有效!(好吧,findE 算法没有,但至少我在正确的值之间搜索)
下一个:循环用户输入,直到满足条件
评论
energy[:len(energy)-1]
energy[:-1]
zip
zip
zip(energy, energy[1:], energy[1:])