4

我想将列表中的每个第 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

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

4

2 回答 2

5

切片分配的右侧必须是适当长度的序列;Python 将'Hey!'其视为字符序列'H', 'e', 'y', '!'

你可以很聪明地创建一个适当长度的序列:

x[::2] = ['Hey!'] * len(x[::2])

但是,最清晰的方法是for循环:

for i in range(0, len(x), 2):
    x[i] = 'Hey!'
于 2013-04-09T18:31:31.407 回答
1

列表理解也可以:

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

这显然是 n = 3。

于 2013-04-09T18:33:29.183 回答