多次for循环调用同一随机列表失效问题求助
解决随机列表共用的问题
这个问题的核心在于你每次调用random_plan()都会触发一次新的随机列表生成,所以多个for循环各自调用函数时,自然会拿到不同的列表。解决思路很简单:只生成一次随机列表,把它存到变量里,让所有循环都复用这个变量。
方法一:预生成列表并复用
先调用一次random_plan()把结果存起来,之后所有循环都用这个变量:
# 只生成一次随机列表,保存到变量中 shared_plan = random_plan() # 第一个循环使用shared_plan for x in shared_plan: if x[0] == 1: goto(x_cord, y_cord) # 第二个循环同样使用shared_plan,用的是同一个列表 for x in shared_plan: # 这里写你的第二个循环逻辑 pass # 后续的第三、第四个循环也复用shared_plan即可
方法二:合并循环(更简便)
如果四个循环都是针对同一个列表的不同元素或不同条件,其实可以合并成一个循环处理,既避免重复生成列表,又让代码更简洁:
shared_plan = random_plan() for x in shared_plan: # 处理第一个条件 if x[0] == 1: goto(x_cord, y_cord) # 处理第二个条件 elif x[0] == 2: do_another_action() # 第三、第四个条件依次类推 elif x[0] == 3: ... elif x[0] == 4: ...
特殊情况:如果random_plan()是生成器函数
如果random_plan()是用yield实现的生成器(而不是直接返回列表),它只能被遍历一次。这时候需要先把生成器转换成列表再保存:
# 将生成器转换为可重复遍历的列表 shared_plan = list(random_plan()) # 之后的循环就可以正常复用这个列表了
这样就能保证所有循环都使用同一个随机生成的列表,不会出现每次循环都重新生成的问题。
内容的提问来源于stack exchange,提问作者SkinnyBetas
相关产品推荐
相关产品推荐

