我有一个数组,例如:
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
它想要什么,我该如何解决?
答案 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)
我建议将其写为:
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]