如何在Python中将列表向左移动x位,并用零填充空值?
向左移动1位
输入:[1, 2, 3, 4]
输出:[2, 3, 4, 0]
向左移动2位
输入:[1, 2, 3, 4]
输出:[3, 4, 0, 0]
如何在Python中将列表向左移动x位,并用零填充空值?
向左移动1位
输入:[1, 2, 3, 4]
输出:[2, 3, 4, 0]
向左移动2位
输入:[1, 2, 3, 4]
输出:[3, 4, 0, 0]
def shift_left(arr, n):
return arr[n:] + [0 for _ in range(n)]
或稍微简洁一些:
def shift_left(arr, n):
return arr[n:] + [0] * n
append
和roll
方法:import numpy as np
def shift_left(x_, r):
return np.append(np.roll(x_, -r)[:-r], [0 for _ in range(0, r)])
print(shift_left([1, 2, 3, 4], 1))
print(shift_left([1, 2, 3, 4], 2))
结果:
[2 3 4 0]
[3 4 0 0]
解释
roll
时:print(np.roll([1, 2, 3, 4], -2))
结果:
[3 4 1 2]
您需要将每个元素向左移动r
次(r
= -2)。但我们不想要最后的r
个元素,因此:
print(np.roll([1, 2, 3, 4], -2)[:-2])
结果:
[3 4]
r
个值为0,所以我们可以将 r
个0添加到数组的末尾。print(np.append(np.roll([1, 2, 3, 4], -2)[:-2], [0 for _ in range(0, 2)]))
结果:
[3 4 0 0]
return
关键字,现在它返回的是实际结果。 - Ahmet
arr[shift:]+[0]*shift
arr[shift:].__add__([0]*shift)
del items[0]; items.append(0)
用于单次移位。 - John Gordoncollections.deque
。 - Mark