来回循环Python

Dan*_*iel 23 python loops for-loop infinite-loop

我想创建一个无限循环,从0到100向上计数到0到0(依此类推),只有在满足循环内的某些收敛标准时才会停止,所以基本上是这样的:

for i in range(0, infinity):
    for j in range(0, 100, 1):
        print(j) # (in my case 100 lines of code)
    for j in range(100, 0, -1):
        print(j) # (same 100 lines of code as above)
Run Code Online (Sandbox Code Playgroud)

有没有办法将两个for循环合并到一个j中,以便我没有在循环中写出两次相同的代码?

dam*_*ois 41

使用chain方法itertools

import itertools
for i in range(0, infinity):
    for j in itertools.chain(range(0, 100, 1), range(100, 0, -1)):
        print(j) # (in my case 100 lines of code)
Run Code Online (Sandbox Code Playgroud)

正如@Chepner所建议的那样,你可以使用itertools.cycle()无限循环:

from itertools import cycle, chain

for i in cycle(chain(range(0, 100, 1), range(100, 0, -1))):
    ....
Run Code Online (Sandbox Code Playgroud)

  • 您也可以在其中添加`itertools.cycle`,以避免嵌套循环.`for i in cycle(chain(range(100),range(100,0,-1))`. (13认同)

pim*_*314 17

除了其他答案,你可以使用一些数学:

while(True):
    for i in range(200):
        if i > 100:
            i = 200 - i
Run Code Online (Sandbox Code Playgroud)


twa*_*erg 9

这是另一种可能性:

while notConverged:
    for i in xrange(-100, 101):
        print 100 - abs(i)
Run Code Online (Sandbox Code Playgroud)


N C*_*han 6

如果您有一组重复的代码,请使用函数来节省空间和精力:

def function(x, y, x, num_from_for_loop):
    # 100 lines of code 

while not condition:
    for i in range(1, 101):
        if condition:
            break
        function(x, y, z, i)
    for i in range(100, 0, -1):
        if condition:
            break
        function(x, y, z, i)
Run Code Online (Sandbox Code Playgroud)

你甚至可以用一个 while True