迭代python循环直到上一个位置的有效方法

时间:2018-08-22 10:27:11

标签: python list for-loop

我有一个列表a,我需要从位置2迭代到其先前的位置1。

# old index - 0 1 2 3 4

a = [1,2,3,4,5]

# new index - 2,3,4,0,1
# new value - 3,4,5,1,2
cnt = 0 
while True:
    for i in range(2,len(a)):
        print(a[i])

    for i in range(len(a)-2-1):
        print(a[i])

    break

我正在使用2 for循环,但是我相信应该有更好的方法来实现它。

5 个答案:

答案 0 :(得分:1)

假设我们从列表a = [1,2,3,4,5]开始。

您可以使用collections.deque及其方法deque.rotate

from collections import deque

b = deque(a)
b.rotate(-2)

print(b)

deque([3, 4, 5, 1, 2])

或者,如果您愿意使用第三方库,则可以使用NumPy和np.roll

import numpy as np

c = np.array(a)
c = np.roll(c, -2)

print(c)

array([3, 4, 5, 1, 2])

答案 1 :(得分:1)

您可以创建一个新列表,该列表组合特定值之后和特定值之前的元素,在您的情况下,假设3

a = [1, 2, 3, 4, 5]
piv = a.index(3)
print(a[piv:] + a[:piv])

为您提供[3, 4, 5, 1, 2]

答案 2 :(得分:0)

基于python的基本解决方案

a[2::] + a[:2:]

给予

[3, 4, 5, 1, 2]

相同的通用版本是

rotate_from = 2
a[rotate_from::] + a[:rotate_from:]

答案 3 :(得分:0)

a = [1,2,3,4,5]

position = 2
for item in a[position:] + a[:position]:
    print(item)

答案 4 :(得分:0)

编写一个用于旋转列表的功能,

e.g.

---
fruits:
  - { apple, when: do_you_love_fruits }
  - { orange, when: do_you_love_fruits }
  - { mango, when: do_you_love_fruits }