Python实现从10到3010数字序列每3项选取1项存入列表的算法问题排查
问题分析与解决
我来帮你排查这个问题!你的思路方向是对的,但代码里的计数器逻辑有个小疏漏,导致后续数字都没被正确添加进来。
问题出在哪?
看你的代码:第一次循环时,i=1触发第一个if,把10加入列表,然后i变成2。这时候第二个if判断i==4不成立,i就保持2。
接下来的每一次循环里,i一直是2——第一个if(i==1)不触发,第二个if(i==4)也不触发,i再也不会被递增或重置。自然只有10被加入列表了。
修复方案1:修正计数器逻辑
把计数器的递增操作移到每次循环的末尾,确保每一次迭代都能更新计数器:
excluded_values = [] i = 1 for index in range(10, 3010): if i == 1: excluded_values.append(index) # 每次循环都递增计数器 i += 1 # 达到4时重置为1 if i == 4: i = 1
这样计数器会按1→2→3→1→2→3...的规律循环,每3个数字就会触发一次添加操作。
修复方案2:更Pythonic的写法(无需计数器)
其实Python的range本身支持步长参数,完全可以不用额外计数器,直接生成你需要的序列:
# 从10开始,每次跳3个,直到3010(不包含) excluded_values = list(range(10, 3010, 3))
这种写法更简洁高效,也避免了手动维护计数器可能出现的逻辑错误。
内容的提问来源于stack exchange,提问作者liberlux




