You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重置并重新打乱next迭代器以循环生成随机角度?

实现循环迭代并重复打乱的角度生成器

你可以通过自定义生成器函数来实现需求,生成器会在每一轮360个角度耗尽后,自动重新打乱列表并继续生成元素,满足无限循环输出不重复打乱序列的要求。

方案1:使用生成器函数(推荐)

这种方式代码简洁、逻辑清晰,适合长期复用:

import random

def infinite_shuffled_angles():
    while True:
        # 每次循环重新创建角度列表并打乱
        angles = list(range(-180, 180))
        random.shuffle(angles)
        # 逐个返回打乱后的元素
        yield from angles

使用示例:

n_list = []
# 初始化生成器
angle_gen = infinite_shuffled_angles()

for _ in range(1000):
    n_list.append(next(angle_gen))

print(len(n_list))  # 输出:1000

生成器工作逻辑:

  • while True 构建无限循环,确保可持续生成角度
  • 每一轮循环都会重新创建完整角度列表并打乱,保证每轮序列都是全新乱序
  • yield from angles 逐个返回当前打乱列表的元素,列表耗尽后自动进入下一轮循环

方案2:手动捕获迭代器耗尽异常

如果不想定义额外函数,也可以在循环中手动检查迭代器状态,捕获StopIteration异常重置迭代器:

import random

all_angles = list(range(-180, 180))
random.shuffle(all_angles)
next_angle = iter(all_angles)

n_list = []
for _ in range(1000):
    try:
        current_angle = next(next_angle)
    except StopIteration:
        # 迭代器耗尽,重新打乱并创建新迭代器
        random.shuffle(all_angles)
        next_angle = iter(all_angles)
        current_angle = next(next_angle)
    n_list.append(current_angle)

print(len(n_list))  # 输出:1000

这种方式直接在原逻辑上修改,适合快速适配简单场景,但代码可读性不如生成器方案。

内容的提问来源于stack exchange,提问作者Penguin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:27:09