Python列表生成:按步长6在120-240区间往复生成90个值
问题根因
你的代码仅通过当前数值判断下一步操作,没有单独维护增减方向的状态,自然会出现数值递减到236时触发递增逻辑的问题:236本身确实满足>=120 且 !=240的判断条件,不是语法写错了,是判断逻辑少了方向维度。
另外你的代码还有个隐藏问题:初始e已经包含1个元素,循环执行90次append后,最终列表长度是91,也不符合90个元素的要求。
修复方案
方案1:维护方向变量(易理解,适合新手)
新增一个变量记录当前是递增还是递减状态,只有触达120或240边界时才反转方向:
res = [120] # 方向标记:1代表递增,-1代表递减 direction = 1 target_length = 90 while len(res) < target_length: next_val = res[-1] + direction * 6 res.append(next_val) # 触达边界时反转方向 if next_val == 240 or next_val == 120: direction *= -1
方案2:预生成周期拼接(性能更高,适合大长度需求)
先算出单次完整升降周期的所有元素,再按需要的长度直接拼接,不需要循环判断每一步:
# 生成递增段:120到240 increase_part = list(range(120, 241, 6)) # 生成递减段:234到126(去掉和递增段重复的首尾值240、120) decrease_part = list(range(234, 120, -6)) # 完整周期:从120升为240再降回126,下次接120刚好完成一个循环 full_cycle = increase_part + decrease_part # 计算需要的完整周期数和剩余元素数 cycle_count = 90 // len(full_cycle) remain_count = 90 % len(full_cycle) # 拼接得到最终90个元素的列表 res = full_cycle * cycle_count + full_cycle[:remain_count]
两种方案输出的结果完全符合需求,你可以直接验证长度和数值变化逻辑。
内容的提问来源于stack exchange,提问作者lukeborgen
相关产品推荐
相关产品推荐

