我当前正在构建图像像素迭代器,并且在2D网格上选择一个点并向外迭代(上,下,左,右,等等)。在开发过程中,我编写了这样的for循环,以了解其功能:
expanding = [1, 2]
# Expected functionality: continues to iterate "3" forever.
for expand in expanding:
expanding.append(3)
我希望它会以无限循环的形式继续下去,迭代序列如下:1
,2
,3
,3
,3
,3
,...
等。由于我的输出结构,它似乎只在2
上关闭了。
我算法的这一部分的任务是通过选择随机坐标并向外扩展将图像分解为颜色组,检查颜色范围是否与父颜色相距太远,因此需要连续迭代器直到最终确定一无所有。
使用该功能可以将其简单地追加到数组中以供将来迭代使用,而无需完成数组并在继续操作之前删除特定元素,就像“实时循环” 。
答案 0 :(得分:1)
我自己使用“枚举”方法包装了列表,下面的代码可以满足您的要求:
my_list = [1,2]
for i, element in enumerate(my_list):
my_list.append(3)
答案 1 :(得分:1)
这里有post,讨论了即使可以也不要更改要迭代的容器的原因。
如何使用while循环并在完成后退出:
my_list = [1,2]
while True:
my_list.append(3)
if #(check if out of range):
break
答案 2 :(得分:1)
您可能想要查看其他数据结构,例如队列或堆栈。
作为一个非常非常差的示例,有些图算法与以下逻辑相距不远:
seen = set()
stack = [1]
while stack:
current = stack.pop()
if current in seen or abs(current) > 5:
continue
seen.add(current)
print 'Processed %s' % current
stack.append(current + 1)
stack.append(current - 1)
将提供
Processed 1
Processed 0
Processed -1
Processed -2
Processed -3
Processed -4
Processed -5
Processed 2
Processed 3
Processed 4
Processed 5