gpt4 book ai didi

python - 如何让 for 循环在 while 循环的每次迭代中重新评估

转载 作者:太空宇宙 更新时间:2023-11-04 10:54:06 25 4
gpt4 key购买 nike

问题部分代码:

while counter < length:
if something:
else:
for key,value in dictionary.items():
if something:
else:
counter += 1

结构是一个{ key:[ {key:value,key1:value1}, {key:value,key1:value1} ] }这就是计数器(列表索引)的用途。

所以我在自学 Python (3.2.3) 时在我编写的一些脚本中注意到了这一点。

我尝试搜索但没有成功(也许我的搜索词是错误的,谁知道呢?)并且我已经检查了文档,问题似乎是 for while 语句它说,“while 语句用于只要表达式为真,就会重复执行”。对于 For 语句,它说,“表达式列表被评估一次”。

现在,当我的脚本运行时,它不断出现关键错误,因为计数器增加了 1;但是 for 语句没有更新以反射(reflect)列表中的新元素,这是另一个字典;它仍然使用第一个元素。

我假设 while 循环中的每次迭代都会导致 For 语句重新计算。显然我在这一点上错了。

现在我可以重写代码来解决这个问题,但是我已经遇到过几次了,所以我想知道的是,如何以这种方式在 while 语句中使用 For 循环,但是让它通过 while 循环在每次迭代中重新评估 For 语句。

谢谢!

更新:我在下面添加了实际代码。如果我只是做错了什么,我不会感到惊讶。我正在观察调试器中的值,当计数从 0 变为 1 时,它会在 while 循环的下一次迭代中开始。从那里一切都按预期进行,直到它遇到 For 循环“for key,value in item.items():”,并且 item.items() 的值根本没有改变。更新更新:在尝试弄清楚之后,我很确定是 v: 中的 for item 导致了问题。让我看看我能不能弄明白!

已修复!问题出在 v: 中的 For 项,它在 while 循环之外,通过将它移入循环来解决。

def checkDifferences(newFile,oldFile):
resultDiff = []
for k,v in newFile.items():
if newFile[k] != oldFile[k]:
for item in v:
count = 0
lengthList = len(newFile[k])
newKeys = newFile[k][count].keys()
oldKeys = oldFile[k][count].keys()
while count < lengthList:
if newKeys == oldKeys:
for key,value in item.items():
newValue = newFile[k][count][key]
oldValue = oldFile[k][count][key]
if newValue == oldValue:
pass
else:
resultDiff.append((k,count,key, oldValue,newValue))
else:
newValue = list(newFile[k][count].keys())
oldValue = list(oldFile[k][count].keys())
keyList = [key for key in newValue if key not in oldValue]
print(keyList)
for key,value in item.items():
if key in keyList:
oldValue = oldFile[k][count][oldKey]
resultDiff.append((k,count,key, None,newValue))
else:
oldValue = oldFile[k][count][key]
newValue = newFile[k][count][key]
if newValue == oldValue:
pass
else:
resultDiff.append((k,count,key, oldValue,newValue))
oldKey = key
count += 1
return resultDiff

最佳答案

for 语句中的表达式在每次 for 循环开始时计算一次。由于您已将 for 循环放入 while 循环中,因此每次在 while 循环周围,当遇到 for 语句时,都会对表达式求值。

您的代码还有其他问题。发布一个真实的代码示例。

关于python - 如何让 for 循环在 while 循环的每次迭代中重新评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11352736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com