Python 在“一个”中同时运行多个(即正常和反向)迭代器;至于;环

Python 在“一个”中同时运行多个(即正常和反向)迭代器;至于;环,python,for-loop,iterator,Python,For Loop,Iterator,到目前为止还没有找到满意的答案,因此将此作为一个新问题发布 我必须做到以下几点: 我有一个参数,例如test\u num=5。 现在,在for循环的单个迭代中,我希望迭代器同时向前和向后运行 作为一个输出,我想要这样的东西: Forward is 0, backward is 5. Forward is 1, backward is 4. Forward is 2, backward is 3. Forward is 3, backward is 2. Forward is 4, backwa

到目前为止还没有找到满意的答案,因此将此作为一个新问题发布

我必须做到以下几点:

我有一个参数,例如
test\u num=5
。 现在,在
for
循环的单个迭代中,我希望迭代器同时向前和向后运行

作为一个输出,我想要这样的东西:

Forward is 0, backward is 5.
Forward is 1, backward is 4.
Forward is 2, backward is 3.
Forward is 3, backward is 2. 
Forward is 4, backward is 1.
我唯一能想到的是:

test_num = 5
for j in range(test_num):
    for i in range(test_num, 0, -1):
        print "Forward is ", i, ", Backward is ", j

但这显然不是正确的方法。使用
zip
是唯一的选择吗?因为
zip
仅适用于使用相同参数或两个参数相等的情况。我在找一种足够灵活的东西

看起来您的代码相当不错,但您只需要1个迭代器

for x in range(5):
    print(str(x)+'_'+str(5-x))

这将为您提供正确的想法

如果您确实想使用两个迭代器,请尝试使用
zip()
函数:

for i,j in zip(range(5), range(5, 0, -1)):
    print "Forward is {0}, backward is {1}".format(i, j)
#Forward is 0, backward is 5.
#Forward is 1, backward is 4.
#Forward is 2, backward is 3.
#Forward is 3, backward is 2. 
#Forward is 4, backward is 1.
但是,您的特定用例似乎很容易使用1迭代器:

for i in range(5)
    print "Forward is {0}, backward is {1}".format(i, 5-i)
#Forward is 0, backward is 5.
#Forward is 1, backward is 4.
#Forward is 2, backward is 3.
#Forward is 3, backward is 2. 
#Forward is 4, backward is 1.
最快的解决方案:

test_num = 5
for i in range(test_num):
    print("Forward is %d, backward is %d."%(i, test_num-i))
另一个快速解决方案(如果您不使用
test\u num-i
expression,请使用我的解决方案):

另一个使用zip的解决方案(如果您想使用zip!但速度较慢):

基准:

timeit.timeit('for i in range(5):pass', number=10000) # 0.004307041002903134
timeit.timeit('for i,j in enumerate(range(5,0,-1)): pass', number=10000) # 0.007563826999103185
timeit.timeit('for i,j in zip(range(5), range(5, 0, -1)): pass', number=10000) # 0.010275325999828056

“同一个参数或两个参数相等”是什么意思
zip
应该可以正常工作。另外,你的“向后”数字不是反向的向前数字而是偏移1,这是故意的吗?不清楚为什么你不想要zip,你能举例解释一下如果我有两个参数,比如
test\u num1=5
test\u num2=4
zip
在第二个迭代器达到4时停止。@tobias_k:是的,你说得对。“向后”数字是向前反转并偏移1的数字。
test_num = 5
for i,j in zip(range(test_num), range(test_num, 0, -1)):
    print("Forward is %d, backward is %d."%(i, j))
timeit.timeit('for i in range(5):pass', number=10000) # 0.004307041002903134
timeit.timeit('for i,j in enumerate(range(5,0,-1)): pass', number=10000) # 0.007563826999103185
timeit.timeit('for i,j in zip(range(5), range(5, 0, -1)): pass', number=10000) # 0.010275325999828056