如何迭代nested_group_map累加shed_count到cycles值后终止循环
问题核心原因
- 数值未真正更新:整数是不可变类型,你遍历values得到的
v只是原shed_count数值的临时拷贝,执行v = v + 1只会修改临时变量,不会改动原字典里的shed_count,所以所有分组的shed_count永远保持初始值0。 - 终止判断逻辑错误:
np.all(check_sum)的作用是判断列表中所有元素都不为0,完全不符合你需要的「所有shed_count等于cycles」的判断要求,再加上shed_count永远为0,所以while循环条件永远成立,进入死循环。
修改建议
- 直接通过键名修改原字典的
shed_count,不要遍历values用临时变量操作,因为你已经明确知道要修改的键叫shed_count,不需要额外遍历判断键名。 - 你已经明确要循环
cycles次,完全可以直接用for _ in range(cycles)实现,不需要额外写判断函数,逻辑更简单不容易出错。 - 如果一定要保留判断终止的写法,重写判断逻辑,只要有一个分组的
shed_count没达到目标值就返回False,全部达到才返回True。
最简修正代码(推荐新手使用)
cycles = 12 nested_group_map = { 'group_l1n': {'shed_count': 0}, 'group_l1s': {'shed_count': 0}, 'group_l2n': {'shed_count': 0}, 'group_l2s': {'shed_count': 0} } # 直接循环指定次数,不需要额外判断 for _ in range(cycles): for group in nested_group_map.values(): group['shed_count'] += 1 # 打印验证结果 for group_name, info in nested_group_map.items(): print(f"{group_name}的shed_count:{info['shed_count']}")
保留原while判断逻辑的修正代码
cycles = 12 nested_group_map = { 'group_l1n': {'shed_count': 0}, 'group_l1s': {'shed_count': 0}, 'group_l2n': {'shed_count': 0}, 'group_l2s': {'shed_count': 0} } def cycle_checker(target): # 判断所有分组的shed_count都等于目标值 for group in nested_group_map.values(): if group['shed_count'] != target: return False return True while not cycle_checker(cycles): for group in nested_group_map.values(): group['shed_count'] += 1 # 需要打印的话直接取原字典的值 print(group['shed_count']) # 打印验证结果 for group_name, info in nested_group_map.items(): print(f"{group_name}的shed_count:{info['shed_count']}")
内容的提问来源于stack exchange,提问作者bbartling
相关产品推荐
相关产品推荐

