首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中移动列表

在Python中移动列表
EN

Stack Overflow用户
提问于 2020-12-02 07:52:44
回答 3查看 216关注 0票数 4

如何在Python中将列表左移x,并用零填充空值?

左移1

输入:[1, 2, 3, 4]输出:[2, 3, 4, 0]

左移2

输入[1, 2, 3, 4]输出[3, 4, 0, 0]

EN

回答 3

Stack Overflow用户

发布于 2020-12-02 07:59:56

就我而言,没有“简单”的方法,因为Python的列表不受大小的限制,但是你可以很容易地实现一个算法来处理这个问题:

代码语言:javascript
复制
def shift_left(arr, n):
    return arr[n:] + [0 for _ in range(n)]

或者更深思熟虑一点:

代码语言:javascript
复制
def shift_left(arr, n):
    return arr[n:] + [0] * n
票数 3
EN

Stack Overflow用户

发布于 2020-12-02 08:08:27

您可以组合numpy的appendroll方法:

代码语言:javascript
复制
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))

结果:

代码语言:javascript
复制
[2 3 4 0]
[3 4 0 0]

说明

当您在列表上使用roll时:

代码语言:javascript
复制
print(np.roll([1, 2, 3, 4], -2))

结果:

代码语言:javascript
复制
[3 4 1 2]

将每个元素向左移动r次(r= -2)。但是我们不想要最后的r元素,所以:

代码语言:javascript
复制
print(np.roll([1, 2, 3, 4], -2)[:-2])

结果:

代码语言:javascript
复制
[3 4]

我们希望最后一个r值为0。因此,我们可以将r 0附加到数组的末尾。

代码语言:javascript
复制
print(np.append(np.roll([1, 2, 3, 4], -2)[:-2], [0 for _ in range(0, 2)]))

结果:

代码语言:javascript
复制
[3 4 0 0]
票数 1
EN

Stack Overflow用户

发布于 2020-12-02 08:11:14

您可以将两个列表连接为:

代码语言:javascript
复制
arr[shift:]+[0]*shift

或者,如果你像我一样喜欢链式链接:

代码语言:javascript
复制
arr[shift:].__add__([0]*shift)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65100289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档