在python中分配列表中的每个第n个元素

在python中分配列表中的每个第n个元素,python,list,Python,List,我想将列表中的每个第n个元素设置为其他元素 (就像Matlab一样。) 下面是一个N=2的尝试: >>> x=['#%d' % i for i in range(10)] >>> x ['#0', '#1', '#2', '#3', '#4', '#5', '#6', '#7', '#8', '#9'] >>> x[0::2] = 'Hey!' Traceback (most recent call last): File "<st

我想将列表中的每个第n个元素设置为其他元素

(就像Matlab一样。)

下面是一个N=2的尝试:

>>> x=['#%d' % i for i in range(10)]
>>> x
['#0', '#1', '#2', '#3', '#4', '#5', '#6', '#7', '#8', '#9']
>>> x[0::2] = 'Hey!'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: attempt to assign sequence of size 4 to extended slice of size 5
>>x=['#%d'%i代表范围(10)内的i]
>>>x
['#0', '#1', '#2', '#3', '#4', '#5', '#6', '#7', '#8', '#9']
>>>x[0::2]=“嘿!”
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:尝试将大小为4的序列分配给大小为5的扩展片

我怎样才能解决这个问题?切片似乎期望一个iterable,而不仅仅是一个值。

切片赋值的右侧必须是一个长度适当的序列;Python正在处理
“嘿!”作为字符序列
'H','e','y',!'

您可以巧妙地创建一个适当长度的序列:

x[::2] = ['Hey!'] * len(x[::2])
但是,最清晰的方法是
for
循环:

for i in range(0, len(x), 2):
    x[i] = 'Hey!'

也可以通过列表理解:

x=['#%d' % i for i in range(10)]
['Hey!' if i%3 == 0 else b for  i,b in enumerate(x)]

n=3时显然是这样。

@JasonS有一个单行程序(添加在上面),但它的可读性要差得多。我个人认为,第一个解决方案非常类似python。这不是一个数组,而是一个列表。这很重要,因为在标准库中有一个数组类型,在公共库中也有一个不同的数组类型,
numpy
,并且有一个numpy
array
x[:2]=“嘿!”
会有效的。谢谢,我已经更正了。