用于在索引1处重新开始范围的循环迭代

时间:2018-02-08 05:56:28

标签: python for-loop iteration

我试图迭代循环,当时有2个索引的步骤,一旦到达结束,重新启动相同但是从索引1开始,而不是零。

我已经在this上阅读了不同的文章,并附带了一个while循环解决方法。但是,我正在寻找一个选项,它只使用带有范围的for循环中的元素,而不使用itertool或其他库或嵌套循环:

这是我的代码:

j = [0,0,1,1,2,2,3,3,9,11]
count = 0
for i in range(len(j)):
    if i >= len(j)/2:
        print(j[len(j)-i])
        count += 1
    else:
        count +=1
        print(j[i*2],i)

这是输出:

0 0
1 1 
2 2
3 3
9 4 
2
2
1 
1
0

循环不会从应该的位置开始。 这是所需的输出:

0 0
1 1
2 2
3 3
9 4
0 5
1 6
2 7
3 8
11 9

我该如何解决?

2 个答案:

答案 0 :(得分:2)

您可以通过组合两个range()调用来完成此操作,例如:

代码:

j = [0, 0, 1, 1, 2, 2, 3, 3, 9, 11]
for i in (j[k] for k in 
          (list(range(0, len(j), 2)) + list(range(1, len(j), 2)))):
    print(i)

并使用itertools解决方案:

import itertools as it
for i in it.chain.from_iterable((it.islice(j, 0, len(j), 2),
                                 it.islice(j, 1, len(j), 2))):
    print(i)

结果:

0
1
2
3
9
0
1
2
3
11

答案 1 :(得分:1)

另一个itertools解决方案:

import itertools as it


lst = [0, 0, 1, 1, 2, 2, 3, 3, 9, 11]


a, b = it.tee(lst)
next(b)
for i, x in enumerate(it.islice(it.chain(a, b), None, None, 2)):
    print(x, i)

输出

0 0
1 1
2 2
3 3
9 4
0 5
1 6
2 7
3 8
11 9