有没有一种pythonic的方法可以“热交换”列表?

时间:2020-11-10 17:25:10

标签: python loops hotswap

通常,修改循环遍历的列表被认为是错误的形式,但是我还没有找到解决该问题的Python方法。问题的症结在于,我必须开始循环并执行一些操作,然后才能知道列表的长度。我可以放心地假设此列表中至少有一项,但这就​​是我所要做的,直到我迈出第一步。

用于某些其他上下文::我正在使用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方法有任何想法吗?

1 个答案:

答案 0 :(得分:3)

无论何时要求列表迭代器提供下一个值(可能使用next()for或其他机制),它都会检查它是否已到达末尾并应提高StopIteration。迭代基于列表的索引,无论列表已被重新排序多少,它都会获取下一个索引值。这意味着,即使您要迭代列表中的最后一个值并添加更多值,迭代也将继续,因为您尚未达到超出列表范围的索引。

这就是您想要的。 for将被迭代一次,但是在返回下一个迭代之前,将添加更多的值,并且将迭代这些值。这就是您的打印对帐单显示的内容

1
2
3
4
5

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

很好,伙计。