如何在Python中将列表左移x,并用零填充空值?
左移1
输入:[1, 2, 3, 4]输出:[2, 3, 4, 0]
左移2
输入[1, 2, 3, 4]输出[3, 4, 0, 0]
发布于 2020-12-02 07:59:56
就我而言,没有“简单”的方法,因为Python的列表不受大小的限制,但是你可以很容易地实现一个算法来处理这个问题:
def shift_left(arr, n):
return arr[n:] + [0 for _ in range(n)]或者更深思熟虑一点:
def shift_left(arr, n):
return arr[n:] + [0] * n发布于 2020-12-02 08:08:27
您可以组合numpy的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]发布于 2020-12-02 08:11:14
您可以将两个列表连接为:
arr[shift:]+[0]*shift或者,如果你像我一样喜欢链式链接:
arr[shift:].__add__([0]*shift)https://stackoverflow.com/questions/65100289
复制相似问题