【问题标题】:Fill a portion of a list in Python / Equivalent of std::fill在 Python 中填充列表的一部分/等效于 std::fill
【发布时间】:2020-07-26 12:28:24
【问题描述】:

我只是想知道在 python 中是否有一个干净的解决方案来用一些值填充列表的一部分(除了简单地迭代子列表)。例如,在 C++ 中,我会使用 std::fill。到目前为止,我发现了以下语法:

x = [0]*10       # some array
x[2:5] = [7]*3

使用 numpy 的解决方案也可以。

【问题讨论】:

  • 同样的方法也适用于 numpy,你试过 numpy 吗?
  • 是的,它有效,但我对这个答案并不完全满意。也许我应该澄清我的目标。当我查看这段代码-sn-p 时,我需要一点时间来了解发生了什么。与此相反,在我看来,std::fill(fist, last, value) 更清晰。
  • 看看,numpy.put 大致相当于上面的。
  • 您可以定义自己的简短 fill 函数,在循环中执行此操作或使用您自己的解决方案很容易...
  • @Adam.Er8 是的,当然,但我不想开始维护自己的小助手库

标签: python list numpy


【解决方案1】:

你可以使用np.repeat:

import numpy as np

x = np.repeat(0, 10)
x[2:5] = np.repeat(7, 3)

【讨论】:

  • 对于 numpy 你不需要重复。
  • 我认为这与问题中的示例没有本质区别
  • 切片赋值可以改变列表的长度。数组的大小是固定的。标量值被广播以适应。
【解决方案2】:

每个类都有自己的方法。对于numpy`

x = np.zeros(10, int)

创建一个零数组。

x[2:7] = 3

将 3 分配给它的一部分。

这与您的列表示例类似,但在某些方面却截然不同。列表切片分配与 numpy 不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 2018-01-01
    • 2016-04-01
    • 2011-01-19
    • 1970-01-01
    • 2013-07-15
    • 2010-10-16
    相关资源
    最近更新 更多