Python顺序并行循环执行异常,无法生成目标递减序列求助
问题分析与解决方案
你的核心需求是生成依次递减的序列:从左到右,每个位置的值先保持最大值,直到左边所有位置都降到比它小1的数值后,再开始递减当前位置,直到所有位置为0。原for循环仅遍历每个元素一次,无法完成多轮递减;改用while时又错误地逐个位置单独递减,偏离了预期逻辑。
修正后的代码
import time list_a = ['AA','BB','CC'] retry_cnt = [3] * len(list_a) # 持续循环直到所有计数归零 while any(cnt > 0 for cnt in retry_cnt): # 从左到右检查每个位置,保证顺序递减逻辑 for i in range(len(retry_cnt)): # 仅当当前位置大于0,且左边所有位置都等于当前值-1时,才允许递减 left_all_valid = all(retry_cnt[j] == retry_cnt[i] - 1 for j in range(i)) if retry_cnt[i] > 0 and left_all_valid: retry_cnt[i] -= 1 print(retry_cnt) time.sleep(0.2) break # 每次只修改一个位置,重新从左开始检查
代码逻辑说明
- 外层
while循环:确保程序持续运行,直到所有计数都为0 - 内层
for循环:从左到右遍历位置,优先处理左侧元素,保证递减顺序 left_all_valid判断:这是实现预期序列的核心——只有当前位置左边的所有数值都比它小1时,才允许递减当前位置,避免单独递减某一位置- 修改后
break:每次只调整一个位置,重新从左开始检查,确保序列按预期逐步变化
运行后将输出你期望的序列:
[2, 3, 3]
[2, 2, 3]
[2, 2, 2]
[1, 2, 2]
[1, 1, 2]
[1, 1, 1]
[0, 1, 1]
[0, 0, 1]
[0, 0, 0]
内容的提问来源于stack exchange,提问作者hiroto1129
相关产品推荐
相关产品推荐

