我想更改列表中的多个值,例如,每2的倍数。使用切片。 我的逻辑是:
list = [0] * 10
list[::2] = 1
但是,我收到一条错误消息: "必须将迭代分配给扩展切片" 有人可以解释错误以及正确的逻辑来预先形成这样的东西吗?感谢。
答案 0 :(得分:2)
当您分配到while read host
do
ssh -n -o StrictHostKeyChecking=no $host "awk -F'.' '{ print \$1 }' some_file"
done < host_list
的{{1}}时,您需要将分配设为与slice
长度相同的list
。对于您的示例,请指定5个列表:
list
在这个例子中,为什么不明显,但是如果你考虑一下,你就是这样做的:
slice
显然这没有意义。您正尝试将l = [0] * 10
l[::2] = [1] *5
分配给l[3:6] = 2
,赢得工作。 int
只是切片list
的另一种方式,因此您必须为其分配l[::2]
。
将来,请不要为您的列表list
命名,因为这样做会覆盖内置list
功能。
答案 1 :(得分:2)
my_list[::2]
有10//2
(= 5)个元素,因此作业的正确部分也应包含10//2
元素:
>>> my_list = [0] * 10
>>> my_list[::2] = [1]*(10//2)
>>> my_list
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
或者您可以将numpy
与broadcasting一起使用:
>>> import numpy as np
>>> a = np.zeros(10)
>>> a
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
>>> a[::2] = 1
>>> a
array([ 1., 0., 1., 0., 1., 0., 1., 0., 1., 0.])