是否有python方法将指定的元素设置为列表中的某个值?

是否有python方法将指定的元素设置为列表中的某个值?,python,Python,numpy有一个将指定元素设置为某个值的函数 a=numpy.zeros(10) numpy.put(a, [2,3],1) 但是,此方法将直接更改“a”,如果成功,则返回None 我们是否可以保留“a”的完整性并返回新数组 我不必使用numpy,而且更倾向于使用最小依赖关系您可以通过以下方式进行初始化: a = [0]*10 然后只需复制并修改它。无需函数调用,在我看来更具可读性,您可以这样做: >>> a = [0, 0, 0, 0, 0] >>> b

numpy有一个将指定元素设置为某个值的函数

a=numpy.zeros(10)
numpy.put(a, [2,3],1)
但是,此方法将直接更改“a”,如果成功,则返回None

我们是否可以保留“a”的完整性并返回新数组


我不必使用numpy,而且更倾向于使用最小依赖关系

您可以通过以下方式进行初始化:

a = [0]*10

然后只需复制并修改它。

无需函数调用,在我看来更具可读性,您可以这样做:

>>> a = [0, 0, 0, 0, 0]
>>> b = a[:]
请注意,[:]对于大型列表可能会非常慢,因为正如Makato所说,它会创建列表的一个全新副本。这也是numpy船舶具有就地功能的原因。如果可以,请避免完全复制列表

要了解性能,您可以将a[:]想象为a中的[i for i]

我不熟悉numpy,因此,如果我误解了您想要在位置[a,b,c]插入x,相反,您可以这样做:

>>> def put(my_list, x, positions):
...     return [x if n in positions else i for n, i in enumerate(my_list)]
...
>>> put(a, 1, [1, 2])
[0, 1, 1, 0, 0]
或者,或者

>>> b = a[:]
>>> b[1:3] = [1] * 2
>>> b
[0, 1, 1, 0, 0]

这将稍微慢一点。

实施起来并不困难:

def put(orig, where, what):
    return map((lambda i:what if i in where else orig[i]), range(len(orig)))

据我所知没有。你可以用这个不是很有效率但是很好

f = lambda a: lambda b: lambda v: [(v if i in b else a[i]) for i in range(len(a))]
f ([0,0,0,0,0]) ([2,3]) (1)
如果我想要更高效的东西,我会选择:

def f(a, b, v):
    c = a[:]
    for i in b: c[i] = v
    return c

如果其中为[1,2],此函数将返回[0,2,3],[2,3],0,0]。我想问题是where=1返回[0,2,3,0,0],而不是。我会避免源代码读什么,如果我-它一定是什么@StefanoPalazzo,不,它会返回[0,0,1,1,0,0,0…]你自己试试。所以它确实-很抱歉。我写这篇评论的印象是用户想要做puta,1,[2,3],而不是puta,[2,3],1。应该提到的是,你可以只写λa,b,c:a+b+ca,b,c而不是λa:λb:λc:a+b+ca,b,c。put函数正是我想要的。谢谢
f = lambda a: lambda b: lambda v: [(v if i in b else a[i]) for i in range(len(a))]
f ([0,0,0,0,0]) ([2,3]) (1)
def f(a, b, v):
    c = a[:]
    for i in b: c[i] = v
    return c