代码之家  ›  专栏  ›  技术社区  ›  user1050619

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

  •  1
  • user1050619  · 技术社区  · 6 年前

    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
    

    5 回复  |  直到 6 年前
        1
  •  1
  •   jpp    6 年前

    假设我们从一个列表开始 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])
    
        2
  •  1
  •   Jirka Dror Hilman    6 年前

    可以创建一个新列表,将特定值之后和特定值之前的元素组合在一起,例如 3 就你而言:

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

    给了你 [3, 4, 5, 1, 2]

        3
  •  0
  •   Hkoof    6 年前
    a = [1,2,3,4,5]
    
    position = 2
    for item in a[position:] + a[:position]:
        print(item)
    
        4
  •  0
  •   pd321    6 年前

    基于python的基本解决方案

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

    给予

    [3, 4, 5, 1, 2]
    

    rotate_from = 2
    a[rotate_from::] + a[:rotate_from:]
    
        5
  •  0
  •   Rahul K P no11    6 年前

    写一个旋转列表的函数,

    In [114]: def rotate(lst, n):
         ...:     return lst[-n:] + lst[:-n]
         ...: 
    
    In [115]: rotate(a,-2)
    Out[115]: [3, 4, 5, 1, 2]