Python生成相邻元素差值大于3的有序随机列表代码求助
解决方案
思路说明
- 用无限循环包裹「生成候选列表→校验规则」的全流程,只要不符合要求就重新执行生成逻辑
- 校验阶段只要发现任意一对相邻元素差值小于3,直接判定当前列表非法,进入下一轮生成
- 所有相邻元素差值均满足要求时,直接返回结果即可
完整可运行代码
基于你原有写法的修改版
import random def generateList(): while True: timeSlots = list(range(0, 61)) # 如果要包含60,range结束值需设为61(Python range为左闭右开区间) random.shuffle(timeSlots) timeSlots = timeSlots[:9] timeSlots.sort() valid = True for cur, nxt in zip(timeSlots, timeSlots[1:]): if nxt - cur < 3: valid = False break # 发现不符合项直接跳出校验循环 if valid: return timeSlots
更简洁的优化版
使用random.sample直接抽取9个不重复元素,配合all()函数做校验,写法更高效简洁:
import random def generateList(): while True: # 直接从0-60区间随机抽取9个不重复元素 timeSlots = random.sample(range(0, 61), 9) timeSlots.sort() # 一次性校验所有相邻差值是否符合要求 if all(nxt - cur >= 3 for cur, nxt in zip(timeSlots, timeSlots[1:])): return timeSlots
补充说明
9个元素要求相邻差值至少为3,最小需要的区间跨度为(9-1)*3=24,远小于0-60的区间长度,不存在生成失败的情况,不会出现死循环。
内容的提问来源于stack exchange,提问作者safnasfsa
相关产品推荐
相关产品推荐

