我想将列表中的每个第N个元素设置为其他元素。
(就像用于Matlab的this question。)
这是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
我该如何解决这个问题?切片似乎期望可迭代,而不仅仅是单个值。
答案 0 :(得分:4)
切片分配的右侧必须是适当长度的序列; Python将'Hey!'
视为字符序列'H', 'e', 'y', '!'
。
你可以聪明并创建一个适当长度的序列:
x[::2] = ['Hey!'] * len(x[::2])
但是,最明确的方法是for
循环:
for i in range(0, len(x), 2):
x[i] = 'Hey!'
答案 1 :(得分:1)
列表理解也是可能的:
x=['#%d' % i for i in range(10)]
['Hey!' if i%3 == 0 else b for i,b in enumerate(x)]
这显然是n = 3。