"hot swap" 列表有 pythonic 方法吗?

Is there a pythonic way to "hot swap" a list?

通常修改循环列表被认为是错误的形式,但我还没有找到解决我的问题的 pythonic 方法。问题的症结在于我必须开始循环并执行一些操作才能知道我的列表有多长。我可以放心地假设此列表中至少有一项,但在我迈出第一步之前我只知道这些。

一些额外的上下文:我正在使用 pyautogui。我的脚本点击一个按钮,然后显示多个选项,选项的数量决定了我需要再次点击按钮的次数

我最接近的例子:

x=[1] #initial 

y=[2,3,4,5] #stand in for unknown number of loops to make

for i in x:
     if i==1: #check some criteria to determine number of loops
         x.extend(y) #correct number of loops
     print(i) #do some stuff

有人对像这样“热交换”列表的 pythonic 方法有任何想法吗?

每当列表迭代器被要求提供下一个值时(可能使用 next()for 或其他机制),它会检查它是否已到达末尾并应引发 StopIteration.迭代基于列表的索引,无论列表被洗牌多少次,它都会获取下一个索引值。这意味着即使您正在迭代列表中的最后一个值,并且添加了更多值,迭代也会继续,因为您还没有达到列表范围之外的索引。

在您的情况下,这就是您想要的。 for 将迭代一次,但在返回到下一次迭代之前,将添加更多值并迭代这些值。这就是您的打印语句显示的内容

1
2
3
4
5

您不需要事先知道要添加多少个值。列表中下一个索引位置的任何内容都会继续列表。

伙计,一切都好。