Python 如何重复for循环
我对Python有一个问题。我尝试多次重复for循环。我在循环中有一个条件,如果条件为真,循环应该重新开始。我只需要一个for循环的解决方案。例如:Python 如何重复for循环,python,loops,repeat,Python,Loops,Repeat,我对Python有一个问题。我尝试多次重复for循环。我在循环中有一个条件,如果条件为真,循环应该重新开始。我只需要一个for循环的解决方案。例如: for i in range (10): if i==4: i=0 print(i) 不幸的是,这不起作用 输出应该是:0 1 2 3 0 1 2 0 1 2 3…在循环的底层将贯穿变量i转换为0并不意味着在下一次迭代中变量应该是0,因为在每次迭代中python都会自动重新分配它 对于这类任务,您可以使用一种更具
for i in range (10):
if i==4:
i=0
print(i)
不幸的是,这不起作用
输出应该是:
0 1 2 3 0 1 2 0 1 2 3…
在循环的底层将贯穿变量i
转换为0并不意味着在下一次迭代中变量应该是0,因为在每次迭代中python都会自动重新分配它
对于这类任务,您可以使用一种更具python风格的方法
或者您可以使用yield
返回生成器:
>>> def range_printer(r,N):
... a=cycle(range(r))
... for i in range(N*r):
... yield next(a)
...
>>> list(range_printer(4,3))
[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]
在循环的最底层将贯穿变量
i
转换为0并不意味着在下一次迭代中变量应为0,因为在每次迭代中python都会自动重新分配它
对于这类任务,您可以使用一种更具python风格的方法
或者您可以使用yield
返回生成器:
>>> def range_printer(r,N):
... a=cycle(range(r))
... for i in range(N*r):
... yield next(a)
...
>>> list(range_printer(4,3))
[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]
在循环中写入循环的变量(
i
)始终不是一个好主意(这包括我熟悉的所有语言)
尝试改用while循环:
i = 0
while i < 10:
i += 1
if i == 4:
i = 0
或使用循环时常见的模运算符:
i = 0
while True:
print(i % 4)
i += 1
在循环中写入循环的变量(
i
)始终不是一个好主意(这包括我熟悉的所有语言)
尝试改用while循环:
i = 0
while i < 10:
i += 1
if i == 4:
i = 0
或使用循环时常见的模运算符:
i = 0
while True:
print(i % 4)
i += 1
使用以下内容的版本:
使用以下内容的版本:
仍然itertools.cycle可能是OP想要/应该使用的。而且你不能真正更改i变量,因为它是由范围动态生成的。为什么人们总是说你不能更改(重新绑定)i??你当然可以。打印前将i设置为8,您将看到8已打印。唯一的问题是,该范围产生的下一个值与我设置的值无关。@Veky确实如此,但这是另一种情况,请检查编辑!谢谢大家的关注!仍然itertools.cycle可能是OP想要/应该使用的。而且你不能真正更改i变量,因为它是由范围动态生成的。为什么人们总是说你不能更改(重新绑定)i??你当然可以。打印前将i设置为8,您将看到8已打印。唯一的问题是,该范围产生的下一个值与我设置的值无关。@Veky确实如此,但这是另一种情况,请检查编辑!谢谢大家的关注!哎呀,总的来说,你想做的事情听起来是个坏主意。结构化编程通常不能很好地处理
goto
、continue
和break
,更不用说随机地修改循环索引了。在这个问题上有许多不同的看法。此外,考虑<代码>打印[x(4)范围(10)] /<代码>一个更大的Python方式:)tobase>什么是错误的代码>继续< /代码>和<代码>破解< /代码>?@ MKRIGER1可能是代码>过滤器< /代码>和<代码>下< /代码>是更好的抽象。@ MKRIGER1:有很多关于它的文献,从EWD文件到。TL;主要的争论点是,提前退出通常会破坏结构化编程,因为结构化编程最干净,只有一个入口和一个出口。当然也有一些时候,中断
,这确实是一个好主意,但我怀疑OP暂时远离他们会更好。我已经尝试了一段时间,但是TLE,所以我的算法可能会有问题,你试图做的事情听起来总的来说是个坏主意。结构化编程通常不能很好地处理goto
、continue
和break
,更不用说随机地修改循环索引了。在这个问题上有许多不同的看法。此外,考虑<代码>打印[x(4)范围(10)] /<代码>一个更大的Python方式:)tobase>什么是错误的代码>继续< /代码>和<代码>破解< /代码>?@ MKRIGER1可能是代码>过滤器< /代码>和<代码>下< /代码>是更好的抽象。@ MKRIGER1:有很多关于它的文献,从EWD文件到。TL;主要的争论点是,提前退出通常会破坏结构化编程,因为结构化编程最干净,只有一个入口和一个出口。当然也有一些时候,这里有一个中断,实际上这是一个好主意,但我怀疑OP暂时远离他们会更好。我已经尝试了一段时间,但是TLE,所以我的算法可能会有问题