Python 在一定范围内替换数组中的元素



我有一个数组,例如:

Array = [100]*100

然后我想这样做:

Array[0:10] = 1

数组应如下所示:

Array = [1,1,1,1,1,1,1,1,1,1,100,100....,100]

但是Python说不,给了我

Array[0:10] = 1 can only assign an iterable

它想要什么,我该如何解决?

您可以使用array[0:10] = [1] * 10,您只需要制作一个与要替换的切片大小相同的数组。

另一种方法是将你的列表变成一个 numpy 数组,numpy 会将你的值广播到数组的整个部分:

import numpy as np
a = np.array([100]*100)
a[0:10] = 1
print(a)
# array([  1,   1,   1,   1,   1,   1,   1,   1,   1,   1, 100, 100, 100,
#        100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
#        ... 
#       ])

我会给你一个列表的例子:

L = [0 for k in range(100)] # List of 0
L[10:20] = [1 for k in range(10)]
# Output:
L = [0, ..., 0, 1, 1, ..., 1, 0, ..., 0]

您还需要提供一个列表来替换 N 个值。

在这种情况下,两端的操作数类型应该相同

Array[0:10]=[1]*10
python

中的列表是可变的,以[100]*100的形式编写它们并不好。以后,当您的代码变得复杂时,您可能会遇到问题。

我建议把它写成:

array = [100 for _ in range(100)]
for i in range(10):
array[i] = 1
print(array)
output: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100]

最新更新