从概念上讲,我想这样做:
arr[20:] = 0
其中arr
是list
。
我怎么能这样做?
答案 0 :(得分:26)
您可以使用切片分配直接进行。
arr[20:] = [0] * (len(arr) - 20)
但自然的方式就是迭代。
for i in xrange(20, len(arr)):
arr[i] = 0
答案 1 :(得分:7)
以下是几个选项:
列表理解
>>> a = [1]*50
>>> a = [aa if i < 20 else 0 for i,aa in enumerate(a)]
>>> a
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
列出切片分配:
>>> a = [1]*50
>>> a[20:] = [0 for aa in a[20:]]
>>> a
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
邮编(* ZIP):
>>> a = [1]*50
>>> a[20:] = zip(*zip(a[20:],itertools.repeat(0)))[1]
答案 2 :(得分:0)
您可以创建一个将数组传递给该数组的函数。我有一段时间没有使用过Python,所以我不会试图向您展示Python代码。在该函数中,您可以使用for
或while
循环来遍历每个值并将每个值设置为等于零。
答案 3 :(得分:0)
如果您使用列表理解,则会复制列表,因此存在内存浪费。 使用列表理解或切片来创建新列表,用于cicles正确设置列表项。
答案 4 :(得分:0)
arr.fill(0)
numpy.ndarray.fill()将使用标量值填充ndarray