在python中如何将列表的多个值同时设置为零?

时间:2011-12-05 19:10:12

标签: python

从概念上讲,我想这样做:

arr[20:] = 0

其中arrlist。 我怎么能这样做?

5 个答案:

答案 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代码。在该函数中,您可以使用forwhile循环来遍历每个值并将每个值设置为等于零。

答案 3 :(得分:0)

如果您使用列表理解,则会复制列表,因此存在内存浪费。 使用列表理解或切片来创建新列表,用于cicles正确设置列表项。

答案 4 :(得分:0)

arr.fill(0)

numpy.ndarray.fill()将使用标量值填充ndarray