如何在Python中将列表索引移动一定值

时间:2016-09-09 18:48:55

标签: python indexing

我需要创建一个python函数,用于将列表中的值按给定值右移。

例如,如果列表为[1,2,3,4]且移位为2,则它将变为[2,3,4,1]。移位值必须是非负整数。我只能使用len和range函数。

这是我到目前为止所拥有的

def shift(array, value):
    if value < 0:
        return
    for i in range(len(array)): 
        arr[i] = arr[(i + shift_amount) % len(arr)]

2 个答案:

答案 0 :(得分:2)

通常你可以用切片

来做到这一点
arr = arr[shift:] + arr[:shift] 

您的移动列表仅为shift = 1,而不是2.您无法通过移动2个位置获得输出。

答案 1 :(得分:-1)

我在您的代码中进行了一些修改(如果您必须使用lenrange函数):

def shift(array, shift_amount):
    if shift_amount < 0:
        return
    ans = []
    for i in range(len(array)): 
        ans.append(array[(i + shift_amount) % len(array)])
    print ans
shift([1,2,3,4],2)

输出:

[3, 4, 1, 2]
  

注意:

     
      
  • 你的逻辑是正确的,但你在同一个数组中的重写值,所以我创建了另一个列表并为其附加值。
  •   
  • 如果移位值为1,则输出为[2, 3, 4, 1]。因此,对于值2,输出应该是[3, 4, 1, 2]
  • 的两个班次   
  • value和shift_amount是代码中的两个不同变量,所以我只使用单个变量。
  •   

您可以使用列表理解(如果您想详细了解列表理解,请参阅此文章Python List Comprehensions: Explained Visually

def shift(array, shift_amount):
    if shift_amount < 0:
        return
    length = len(array)
    print [array[(i + shift_amount) % length] for i in range(length)]
shift([1,2,3,4],0)