我需要创建一个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)]
答案 0 :(得分:2)
通常你可以用切片
来做到这一点arr = arr[shift:] + arr[:shift]
您的移动列表仅为shift = 1
,而不是2.您无法通过移动2个位置获得输出。
答案 1 :(得分:-1)
我在您的代码中进行了一些修改(如果您必须使用len
和range
函数):
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)