更改列表中的多个项目

时间:2017-11-27 19:55:53

标签: python list slice

我想更改列表中的多个值,例如,每2的倍数。使用切片。 我的逻辑是:

list = [0] * 10
list[::2] = 1

但是,我收到一条错误消息: "必须将迭代分配给扩展切片" 有人可以解释错误以及正确的逻辑来预先形成这样的东西吗?感谢。

2 个答案:

答案 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]

或者您可以将numpybroadcasting一起使用:

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