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

时间:2018-08-14 09:50:49

标签: python arrays range

我有一个数组,例如:

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

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

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

另一种方法是将列表转换为numpy数组,并且numpy将broadcast的值用于数组的整个部分:

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,
#        ... 
#       ])

答案 2 :(得分:1)

我给你举一个带有列表的例子:

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个值。

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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]
相关问题